⑴ c語言編程,輸入1000以內的完全數
#include<stdio.h>
intmain()
{
intn,i,sum;
for(n=2;n<=1000;n++)
{
sum=0;
for(i=1;i<n;i++)
{
if(n%i==0)
sum=sum+i;
}
if(sum==n)
{
printf("%ditsfactorsare",n);
for(i=1;i<n;i++)
{
if(n%i==0)
printf("%5d",i);
}
printf(" ");
}
}
return0;
}
這樣就可以了
之前在沒有累加完所有因數的時候 就進行了判斷
這樣就導致部分因數累加等於原值時同樣會列印
比如 24 1 2 3 4 6 8 12
其中 24 = 1 + 2 + 3 + 4 + 6 + 8
⑵ c語言編程 計算1000以內的完全數,每8個數字一行。
#include <stdio.h>
int main()
{
int x,k,f=0,n;
for(x=2;x<=1000;x++)
{
n=0;//注意每次循環n都要為0
for(k=1;k<x;k++)//注意k要從1開始
if(x%k==0)
n=n+k;
if(n==x)
{
printf("%d ",x);
f++;
if(f%8==0)
printf("\n");
}
}
}
//其實1到1000內只有6 28 496這三個
⑶ 用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);
}
⑷ C語言求 1000以內的完全數
重置sum的位置錯了,放到內循環的開頭:
#include<stdio.h>
intwanquanshu()
{
intn,i,k,sum;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
{
sum=0;//放在這里
for(k=1;k<i;k++)
{
if(i%k==0)
{
sum=sum+k;
}
}
if(sum==i)
{
printf("%d ",i);
}
}
}
return0;
}
voidmain()
{
wanquanshu();
}
⑸ 求c語言程序 求1000以內的素數
可以編寫一個素數考察函數,在主函數中調用該函數對1000以內的整數窮舉考察求解,也可以在主函數中直接對1000以內的整數窮舉考察求解。這里提供一個用篩選法求解的代碼,思路是聲明一個大於等於1000個元素的char型(int型當然也可以,這里只是為了減少空間開銷)數組並全部初始化為1,對下標不是素數的元素清0,最後依次輸出不為0元素的下標便是題解。為提高操作效率,用2~33間(33^2>1000了,所以考察已充分了)的素數去除大於這個素數而小於等於1000的不為0的數,能整除的便將這個下標的元素清0。當用小於33的最大素數考察完畢後,依次輸出數組中不為0的元素下標即可。代碼如下:
#include"stdio.h"
intmain(intargc,char*argv[]){
inti,j;
charm[1001];//聲明char型數組作為篩選對象
for(m[0]=m[1]=0,i=2;i<=1000;m[i++]=1);//m[0]和m[1]賦0,其餘賦1備選
i=2;//考察次數2~33,用期間的素數去除大於i且小於等於1000間不為0的數
while((j=i)<33){
while(!m[++j]);//取j為大於i的第一個不為0的數為起始考察對象
while(j<=1000){
if(j%i==0)//這個數若能被小於它的素數整除則以它為下標的元素清0
m[j]=0;
while(!m[++j]);//下一個不為0的數為考察對象
}
while(!m[++i]);//2~33間的下一個素數
}
for(j=i=0;i<=1000;i++)//以下是輸出
if(m[i])//不為0的數組元素的下標便是素數
printf(++j%20?"%4d":"%4d ",i);//每行輸出20個
if(j%20)
printf(" ");
return0;
}
運行結果如下:
⑹ 用C語言編程找出1000以內的所有完數。(涉及知識點:for語句和if語句)。
一個數,所有的真因子(即除了自身以外的約數)的和,恰好等於本身,稱為完數。
所以,要確認是否為完數,只要把所有真因子相加判斷即可。
於是,這個題目的編程思路為:
1 遍歷1~1000;
2 對每個數,判斷是否為完數,如是,則輸出;
3 程序結束。
代碼如下:
#include<stdio.h>
intmain()
{
intn,i,s;
for(n=1;n<=1000;n++)
{
s=0;
for(i=1;i<=n/2;i++)
if(n%i==0)s+=i;//是真因子,累加。
if(s==n)//是完數。
printf("%d,",n);//輸出。
}
return0;
}