完数:一个数恰好等于它的真因子之和
分析:
第一个完全数是6,1+2+3=6。
第二个完全数是28,1+2+4+7+14=28。
第三个完全数是496,1+2+4+8+16+31+62+124+248=496。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv[]) {
int n,i,sum;
for(n=2;n<1000;n++)
{
sum=1;
for(i=2;i<sqrt(n);i++)
if(n%i==0)
sum+=i+n/i; //将可以整除的数加到sum
if(i*i==n)
sum+=n; //因子相同的数,只加一次,此句可省
if(sum==n)
printf("%d ",n);
}
return 0;
}
输出结果:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNyZuBnL3gDO3IDOyYTM1ETMwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
求100以内的所有素数
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define SIZE 100
int main(int argc, char *argv[]) {
int a[SIZE],i,j;
for(i=0;i<SIZE;i++)
a[i]=1;
a[0]=a[1]=0;
for(i=2;i<sqrt(SIZE);i++)
if(a[i]==1) //从素数中再次筛选
{
for(j=i*i;j<SIZE;j+=i) //去除倍数
a[j]=0;
}
for(i=0;i<SIZE;i++)
if(a[i]==1)
printf("%d ",i);
return 0;
}
输出结果: