tft每日頭條

 > 生活

 > c語言1000以内的質數

c語言1000以内的質數

生活 更新时间:2024-11-19 15:15:55

c語言1000以内的質數(C語言标準分解質因數)1

//分解質因數程序:把區間[m,n]的整數分解為标準形式(其中m,n為自然數且1<=m<=n<2^31)

#include <stdio.h> /*包含輸入輸出函數*/

#include <math.h> /*包含數學函數*/

int main () /*主函數*/

{ int z[4793]={2}; //因小于2^31的平方根的素數有4392個

int i,x,g=1,b,q,m,n; //循環變量i,數組下标x,素數個數g,被分解數b,平方根q,範圍[m,n]

for(i=3;i<=46349;i =2) //因46349^2已經大于2^31

{ x=0;q=sqrt(i); //每次都從z[0]開始檢驗

while (i%z[x]!=0) //如i不能被z[x]整除時一直檢驗

{ if(z[x]<=q) x ; //不能确定是素數時:用數組中的下一個素數檢驗

else //确定是素數時:

{ z[g]=i;g ; //保存該素數,素數總個數加1,

break; //退出内循環:檢驗下一個i

}

}

}

printf("請輸入要分解的整數範圍m n(用空格隔開):");scanf("%d %d",&m,&n);

for(i=m;i<=n;i )

{ printf("\n%d=1",i);

x=0;b=i; //每次都從z[0]起檢驗;把i先給被除數b

while(b>1) //沒有分解完繼續

{ g=0;q=sqrt(b); //相同因數個數g置0;

if(z[x]>q){printf("*%d",b);break;} //把i分解完了退出,分解下一個數

while (b%z[x]==0){g ;b/=z[x];} //反複用z[x]去除,并累計能整除的次數 ,直到不能整除

if(g>0)printf("*%d",z[x]); //z[x]是p的因數時,打印z[x]

if(g>1)printf("^%d",g); //相同因數多于一個時,打印因數個數

x ; //用下一個素數檢驗

}

}

return 0;

}

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved