該樓層疑似違規已被系統折疊 隐藏此樓檢視此樓
#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);
}