① 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);
}