10,000 이내의 자연수 중에서 완전수를 모두 찾고, 찾은 완전수의 개수를 세어보세요.
#include<stdio.h>
int main()
{
//找到10000以内所有的完数(等于恰好等于它本身之外的因子之和),并统计完数个数。
int n,i,s,count=0;
printf("找到的所有完数:\n");
for(n=1;n<10000;n++)
{
s=0;
for(i=1;i<n;i++)
{
if(n%i==0)
{
s+=i;
}
}
if(s==n)
{
printf("%d ",n);
count++;
}
}
printf("完数个数为%d.\n",count);
return 0;
}
10000 내의 모든 숫자에 대해 모듈로 연산을 수행하여 i가 이 숫자의 인수인지 확인합니다. 이것이 이 숫자의 인수이면 이 인수를 s에 추가합니다. 마지막으로 s가 이 숫자와 같으면 이 숫자는 다음과 같습니다. 완료.번호!
이 프로그램을 최적화하려면 먼저 요인을 찾으십시오. 요인은 쌍으로 나타납니다. 요인이 보다 작거나 같으면
인 경우 요인이 쌍으로 표시되지 않습니다. 예를 들어, n=36이고 요인은 1,2,3,4,6,9,12,18,36이고 요인 6은 한 번만 나타납니다. 참고: 해당 요소도 있어야 합니다.
유우 s+=i+n/i;
그러면 프로그램에서 i와 n/i가 동일합니다. 즉, 요소가 한 번 반복되고 이 요소를 한 번 빼야 합니다.
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,s,m,count=0;
printf("找到的完数有:\n");
for(n=2;n<10000;n++)
{
s=1;
m=sqrt(n);
for(i=2;i<=m;i++)
{
if(n%i==0)
{
s+=i+n/i;
}
}
if(n==m*m)
{
s-=m;
}
if(s==n)
{
printf("%d, ",n);
count++;
}
}
printf("\n完数个数为%d\n",count);
return 0;
}