该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include
main()
{
int n,q,p,m,k=1,sum=0,s[99999]={2},t[99999];//n是输入的数;q和p分别代表两个数组的工作下标
scanf("%d",&n); //k是用来取小于n数的数组工作下标
for(int i=3;i<=n;i+=2) //去所有小于n的数,放进s数组中
{
int tag=0;
for(int j=2;!tag&&j
if(i%j==0)tag=1;
if(!tag)
{
s[k]=i;
k++;
}
}
int tag=0; //用来判断n是否是质数
for(int j=2;!tag&&j
if(n%j==0)tag=1;
if(!tag)
{
t[0]=1; //如果是,则把1和它本身放进t数组中
t[1]=n;
p=2;
}
else //如果不是素数,则开始分解因数
{
q=0,p=0;
while(1)
{
if(!(n%s[q])||n==s[q]) //s数组的素数从小到大能被整除或就是数本身
{
t[p]=s[q]; //放进t数组
p++;
n/=s[q];
}
else q++; //直到不能被整除,移动s数组下标判断下一个素数
if(!(s[q]))break;
}
}
for(m=0;m
printf("%d\n",sum);
}