一道关于完数的c语言题
课程设计
1
输出1000之内的全部“完数”,要求每行输出5个,并统计完数的个数。一个数如果恰好等于它的因子之和,就称其为完数
-
#include <stdio.h> #include <math.h> int is_perfect_number(int n) { if (n < 2) return 0; int s = 1; int m = (int)sqrt(n); for (int i = 2; i <= m; i++) { if (n % i == 0) { s += i; int j = n / i; if (i != j) s += j; } } return s == n; } int main() { int count = 0; for (int i = 1; i <= 1000; i++) { if (is_perfect_number(i)) { printf("%d ", i); count++; if (count % 5 == 0) printf("\n"); } } printf("\ncount: %d\n", count); return 0; }
-
#include <stdio.h> int main() { int i, j, s, cnt = 0; for (i = 2; i <= 1000; i++) { s = 0; /*保证每次循环时s的初值为0*/ for (j = 1; j < i; j++) { if (i % j == 0) /*判断j是否为i的因子*/ s += j; } if (s == i) { printf("%d ", i); cnt++; if (cnt % 5 == 0) { printf("\n"); } } } printf("\n1000以内共有%d个完数",cnt); return 0; }
-
#include "stdio.h" int main(int argc,char *argv[]){ int n,m,k,i,s,t; for(s=k=0,n=4;n<1000;n++){ for(m=1,t=n/2,i=2;i<=t;i++) if(n%i==0) m+=i; if(m==n){ printf(++k%5 ? "%d " : "%d\n",n); s++; } } if(k%5) printf("\n"); printf("A total of %d.\n",s); return 0; }
-
using System.Linq; //... for(int n=2;n<1001;n++) { List<int> lst=new List<int>(); for(int m=1;m<n;m++) { if(n%m==0)lst.Add(m); } if(n==lst.Sum())Console.Write(n+" "); }
发表回复