#include<stdio.h>
#include<math.h>
#define MAX 10000000
using namespace std;
bool arr[MAX];
void sieve()
{
long long int i,j,k;
k=sqrt(MAX);
for(i=3;i<=k;i+=2)
{
if(arr[i]==0)
{
for(j=i*i;j<MAX;j+=i+i)
{
arr[j]=1;
}
}
}
arr[1]=1;
for(i=4;i<MAX;i=i+2)
{
arr[i]=1;
}
}
int main()
{
sieve();
unsigned long long a,b,n,p;
while(scanf("%llu",&n)==1)
{
if(n==0)
{
break;
}
if(n==29)
{
printf("Given number is prime. But, NO perfect number is available.\n");
continue;
}
if(n==31)
{
a=pow(2,n);
b=pow(2,(n-1))*(a-1);
printf("Perfect: %llu!\n",b);
continue;
}
a=pow(2,n);
if(!arr[n] && !arr[a-1])
{
b=pow(2,(n-1))*(a-1);
printf("Perfect: %llu!\n",b);
}
else if(!arr[n] && arr[a-1])
{
printf("Given number is prime. But, NO perfect number is available.\n");
}
else
{
printf("Given number is NOT prime! NO perfect number is available.\n");
}
}
return 0;
}
#include<math.h>
#define MAX 10000000
using namespace std;
bool arr[MAX];
void sieve()
{
long long int i,j,k;
k=sqrt(MAX);
for(i=3;i<=k;i+=2)
{
if(arr[i]==0)
{
for(j=i*i;j<MAX;j+=i+i)
{
arr[j]=1;
}
}
}
arr[1]=1;
for(i=4;i<MAX;i=i+2)
{
arr[i]=1;
}
}
int main()
{
sieve();
unsigned long long a,b,n,p;
while(scanf("%llu",&n)==1)
{
if(n==0)
{
break;
}
if(n==29)
{
printf("Given number is prime. But, NO perfect number is available.\n");
continue;
}
if(n==31)
{
a=pow(2,n);
b=pow(2,(n-1))*(a-1);
printf("Perfect: %llu!\n",b);
continue;
}
a=pow(2,n);
if(!arr[n] && !arr[a-1])
{
b=pow(2,(n-1))*(a-1);
printf("Perfect: %llu!\n",b);
}
else if(!arr[n] && arr[a-1])
{
printf("Given number is prime. But, NO perfect number is available.\n");
}
else
{
printf("Given number is NOT prime! NO perfect number is available.\n");
}
}
return 0;
}
0 comments: (+add yours?)
Post a Comment