当前位置:首页 » 编程语言 » c语言求完全数的意思
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言求完全数的意思

发布时间: 2022-08-23 18:33:48

c语言中的完数是什么意思

欧几里德证明了:一个偶数是完数,当且仅当它具有如下形式:2^(p-1)*(2^p-1)
其中2^p-1是素数

完全数(Perfect number)是一些特殊的自然数:它所有的真因子(即除了本身以外的约数
)的和,恰好等于它本身。

例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3
=6。第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加
,1+2+4 + 7 + 14=28。后面的数是496,8128。

古希腊数学家欧几里德是通过 2^(n-1)*(2^n-1) 的表达式发现头四个完全数的。

当 n = 2^1*(2^2-1) = 6
当 n = 2^2*(2^3-1) = 28
当 n = 2^4*(2^5-1) = 496
当 n = 2^6*(2^7-1) = 8128
欧几里德证明了:一个偶数是完数,当且仅当它具有如下形式:2^(n-1)*(2^n -1)。

尽管没有发现奇完数,但是当代数学家奥斯丁·欧尔(Oystein Ore)证明,若有奇完全
数,则其形状必然是12p + 1或36p + 9的形式,其中p是素数。在1018以下的自然数中奇完
数是不存在的。

② 用C语言编写“判断一个数是否为完数”!

1、首先打开C语言的编辑软件,这里是使用VS2017版,在c语言的文件中写入头文件和主函数备用:

③ c语言 完全数

#include<stdio.h>
void main()
{
int i,n;
int s=0;
printf("input a number N(1<N<=10000)\n");
while(scanf("%d",&n)!=1) //scanf的返回值是成功读取的参数个数,输入某个字符就退出循环了
{
s=0; //每次都要清零
for(i=1;i<=n;i++)
if(n%i==0)
s=s+i;
if(s==n) //if/else语句应该放在while循环体内,每次循环都会读入一个数,每个数都要作判断
printf("yes\n");
else
printf("no\n");
}
}

④ 关于用C语言求完数

因为最外层的循环需要在每次循环开始时将sum变量清零(sum=0),循环外面的sum=0只是初始化,只在循环没有开始前执行一次,而最外层的那个循环内部的sum=0是每循环一次都会执行的,是清零的操作,如果没有内部的sum=0清零,上次循环时sum+=m这一句代码的操作结果会一直在sum上累加,这样if(sum==number)的判断就永远不会满足,就不会有任何的输出显示了。你可以对程序进行单步调试,就可以发现问题了。

⑤ C语言求完数

你是想找出1000以内的完美数吧,n代表1000以内当前数,i代表约数,s代表约数和。

如果是,那你s的值就越界了。

你应该对每个n,在for循环里重置s,令s=1,这样问题就解决了。

⑥ c语言求完全数

#include<stdio.h>

intmain(void){

inti,count,j,sum;

sum=0;

count=0;

for(i=2;count<3;i++)//<-----------

{

for(j=1,sum=0;j<i;j++)//<------------

{

if(i%j==0)

sum+=j;

}

if(sum==i)

{

printf("%d ",sum);

count++;

}

}

return0;

}

⑦ 用C语言求1000以内的完数

完数,即完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。其所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于本身。
根据该定义 可以得出判断完数的函数如下:
#include <stdio.h>
int is_perfect_number(int n)
{
int i,s=0;
for(i = 1; i <=n/2; i ++)
if(n%i == 0) s+= i;//统计所有真因子的和。
if(s == n) return 1;//如果与原值相等,则该数为完数。

return 0;//不是完数。
}
根据该函数,只需要对需要打印的范围内1 ~1000做遍历,并逐一调用该函数判断,如果返回1则打印即可。
完整代码如下:
#include <stdio.h>
int is_perfect_number(int n)
{
int i,s=0;
for(i = 1; i <=n/2; i ++)
if(n%i == 0) s+= i;//统计所有真因子的和。
if(s == n) return 1;//如果与原值相等,则该数为完数。

return 0;//不是完数。
}

int main()
{
int n;
for(n = 1; n < 1000; n++)
if(is_perfect_number(n)) printf("%d,",n);
}