天天看点

求1000以内的完数及100以内所有素数

完数:一个数恰好等于它的真因子之和

分析:

第一个完全数是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;
}
           

输出结果:

求1000以内的完数及100以内所有素数

求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;
}
           

输出结果:

求1000以内的完数及100以内所有素数