

Дано целое Гаусово число n + mi (принадлежащее Z ).
Требуется:
- Проверить является ли оно простым (в Z ).
- Вывести его разложение на простые (в Z ) множители.
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Taras писал(а):У меня такая же задача, она из задачника А. Шенна. Первую часть задания реализовал...а вот алгоритм разложения на простые числа не могу найти. Помогите плиззз.
Код: Выделить всё
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
bool checkEasy(int a){
int i,n;
for(i=2,n=a/2+1;i<n;i++)
if(!(a%i))
return 0;
return 1;
}
bool checkEasy(int a, int b){
if(!(a*b))
return !((a+b-3)%4);
return checkEasy(a*a+b*b);
}
int main(){
int a,b;
cin>>a>>b;
cout<<checkEasy(a,b);
cout<<endl<<"press any key to continue: "<<endl;
cin.get(),cin.get();
return 0;
}
Код: Выделить всё
#include <iostream>
#include <math.h>
#include <conio.h>
using namespace std;
bool checkEasy(int a, int b)
{
if(a==0)
{
for(int i=2;i<b;i++)
{
if(b%i==0)
{
return 0;
}
}
return 1;
}
if(b==0)
{
for(int i=2;i<a;i++)
{
if(a%i==0)
{
return 0;
}
}
return 1;
}
for(int i=2;i<(a*a+b*b);i++)
{
if((a*a+b*b)%i==0)
{
return 0;
}
}
return 1;
}
void R(int a, int b)
{
for (int i=2;i<=a;i++)
{
for (int j=2;j<a;j++)
{
if (a%i==0 && a%j!=0)
{
a=a/i;
cout <<i<<endl;
}
}
}
for (int i=2;i<=b;i++)
{
for (int j=2;j<b;j++)
{
if (b%i==0 && b%j!=0)
{
b=b/i;
cout <<i<<endl;
}
}
}
}
int main(){
int a,b;
cin>>a>>b;
bool c = checkEasy(a,b);
cout<< c;
cin.get(),cin.get();
if(c==1)
{
cout<<"Easy"<<endl;
R(a,b);
}
else
{
cout<<"not easy";
}
getch();
return 0;
}