题解 | #完全数计算# C语言标准解法
完全数计算
http://www.nowcoder.com/practice/7299c12e6abb437c87ad3e712383ff84
依次遍历从1...n之间的每一个数,求出这个数k的所有因子保存在数组a中,并累加得到所有因子的和sum,若sum-k=k,则k为完全平方数。
对k开根号可以减少判断的次数
#include<stdio.h> #include<math.h> int main(){ int n; while(scanf("%d",&n)!=EOF){ int count =0; for(int k=1;k<=n;k++){ int j=0; int a[50]; int sum=0; for(int i=1;i<=sqrt(k);i++){ if(k%i==0){ a[j++]=i; sum+=a[j-1]; if(i<k/i){ a[j++]=k/i; sum+=a[j-1]; } } } if(k==sum-k) count++; } printf("%d\n",count); } return 0; }