跪求:3-51 素数3-51间每个整数i,若i不是素数,a是i的因子之和,

来源:百度知道 编辑:UC知道 时间:2024/07/01 06:42:59
3-51间每个整数i,若i不是素数,a是i的因子之和,如果a是素数,则把i和a输出到屏幕,占一行。最后把满足条件的i的个数输出。
(注意:这里i的因子包括1,但是不包括i本身。于是i的因子之和是1,则i是素数。)
例如:8的因子有1,2,4,他们之和是7。自已设计函数完成相应功能,如求因子之和等。

#include<stdio.h>
#include<math.h>
void main()
{
int a=1,sum=0,i,j,k,m,b[50],n=0,c[50],p=0;
for(i=3;i<=51;i++) //将非素数i存入数组b[50]中
for(m=2;m<=(int)sqrt(i);m++)
if(i%m==0)
{
b[n]=i;
n++;
break;
}
for(i=0;i<n;i++)
{
for(j=2;j<b[i];j++)
if(b[i]%j==0)//求i的因子之和a
a+=j;
c[p]=a;//将a存入数组
p++;
a=1;
}
for(i=0;i<p;i++)
{
for(k=2;k<=(int)sqrt(c[i]);k++)
if(c[i]%k==0)//判断是否素数
break;
if(k==(int)sqrt(c[i])+1)//如果是非素数
{
sum++;//统计满足条件的i的个数
printf("i=%d,a=%d\n",b[i],c[i]);
}
}
printf("满足条件的i的个数为:%d\n",sum);

}