if(s==m)printf("%d 是完数 \n",s);} }
6 28 496
int n = wanshu(1000);printf("%d", n);} 这样就可以看到结果了
首先我们需要了解一下什么是完数,在数学中如果一个数刚好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3,接下来就用C语言编程找出1000以内的所有完数。 程序分析: 对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。...
int fun(int n)//它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。{ int sum=0;//这是一个完数判断函数;for(int i=1;i<n;i++){ if(n%i==0)sum+=i;} if(sum==n)return 1;return 0;} int main(){ for(int i=1;i<=1000;i++){ if(fun(i)...
m,n根本是重复的变量,用一个就可以了,属于设计上的缺陷 include<stdio.h>#define N 1000 //N以内的完数int main(void){int i, j, k, h;int arr[200];int s=0;int sum=0;for(i = 2; i <= N; i++){s = 0;k = 0;for(j = 1; j < i; j++){if( (i % j) ==...
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...
void main(){ int i,j,s;for(i=1;i<=1000;i++){s=0;for(j=1;j
首先,你只列举了2,3,5,7来除n,这是不够的。1000内的质数有很多,例如11,13,17,19...其次,你的判断完全数的条件不对。还有一点要注意,每一次循环都要给变量赋初值。你应学下用for循环嵌套。这是我写的:include<stdio.h> main()/**by yanghong**/ {unsigned long n=1,i=1,j=...
int factorsum(int n){ int i,s=1;for(i=2;i<n;i++)if(n%i==0) s+=i;return s;} int main(){ int i, m, n,k;int repeat, ri;int factorsum(int number);scanf("%d", &repeat);for(ri = 1; ri <= repeat; ri++){ scanf("%d%d", &m, &n);k=0;for(i=m;i...