Description
一个数P是偶完全数,当且仅当它具有如下形式:P=2 ^(n−1)×(2 ^n−1),且其中2 ^n-1是素数。
[科普]完全数又称完美数或完备数,是一些特殊的自然数:它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。
一个偶数是完全数,当且仅当它具有如下形式:P=2 ^(n−1)×(2 ^n−1),且其中2 ^n-1是素数。此事实的充分性由欧几里得证明,而必要性则由欧拉所证明。
完全数非常稀少,已知的前十个完全数是:
6(1位)、28(2位)、496(3位)、8128(4位)、33550336(8位)、8589869056(10位)、137438691328(12位)、2305843008139952128(19位)、2658455991569831744654692615953842176(37位)、191561942608236107294793378084303638130997321548169216(54位)。
目前关于完全数研究,一直存在两个谜题。一个是,奇完全数是否存在;另一个是,完全数是否具有无限个。
请编程输出第N个(N<=8)偶完全数P,及对应的形如P=2 ^(n−1)×(2 ^n−1)的乘法算式。
注意数据类型要用unsigned long long。
Input
无
Output
输出格式符用%llu来表示unsigned long long
Sample Input 1
1 8
Sample Output 1
6=2*3 2305843008139952128=1073741824*2147483647
Code
#include<stdio.h>
unsigned long long num[8]= {0};
void sushu(int n)
{
unsigned long long i,j,temp;
int k=1;
for(i=4;; i*=2)
{
temp=i-1;
int temp_0=sqrt((float)temp);//用开平方的方法减少循环次数
num[0]=3;//temp=3时不符合循环条件,单独列出
for(j=2; j<=temp_0; j++)
{
if(temp%j==0)
break;
if(j==temp_0)
{
num[k++]=temp;
}
}
if(k==n)
break;
}
}
int main()
{
int n;
unsigned long long m,ji;
while(scanf("%d",&n)!=EOF)
{
sushu(n);
m=(num[n-1]+1)/2;
ji=m*num[n-1];
printf("%llu=%llu*%llu\n",ji,m,num[n-1]);
}
return 0;
}