c语言十万以内超级素数,用C语言求素数的优化
用C語言求素數的優化
這個程序運行了8個小時,求一億以內的素數和超級素數.
大家幫忙看看,我求一億以內的素數和超級素數.從下午5:30開始,一直到零晨0點30才結束.我的電腦配置也可以.INTER E7500的CPU,G41的板子,前端總線1333,2G 1333的內存.大家看看這個程序還可以怎提高一下效率!
c++
1.
程序代碼:
#include
#include
long int prime(long int i) /*求素數的涵數*/
{
int x;
for(x=2;x<=sqrt(i);x++)
if(i%x==0)return 1; /*不是素數返回主調涵數1*/
if(x>sqrt(i))return 0; /*是素數返回主調涵數0*/
}
long int answer()/*此涵數調用prime()得到結果,并輸出*/
{
long int x;
printf("\ninput a numbers:\n");
scanf("\t%ld",&x);
if(prime(x)) /*從被調涵數得到結果判斷真假并輸出相應結果*/
printf("No\t");
else
printf("yes\t");
}
long int prime_super(long int x) /*此涵數判斷是否為超級涵數*/
{
int a,c,b;
a=prime(x); /*調用判斷素數的子涵數,得到被調涵數返回的0或者1*/
b=0;
if(x>19)
{
while(a==0&&b==0&&x>9)/*當第一次判斷返回為0時,再循環直到被調涵數返回值為1或X小于是2位數。*/
{
x=x/10; /*將X去掉最后一位。*/
if(x>1)b+=prime(x); /*如果每次返回都是0,最高位不是1,那么B就一直是0*/
else b++;
}
if(b==0&&a==0) /*所有返回值都為0時,這個數是超級素數,返回主調涵數0*/
return 0;
}
else return 1;
}
long int in_n(long int a) /*此涵數求N以內的所有超級素數或求N是否為素數*/
{
long int i=2,x,c,d=0,e=0,y;
printf("input a number:\n");
input: scanf("%ld",&x);
if(x<=2) /*如果輸入的數小于11時返回重輸入*/
{
printf("the numbers to small,please input a number:\n");
goto input;
}
if(a==51||a==52||a==53) /*當主調涵數傳來的值為‘3’或‘4’或'5'時,要求求N以內的所有超級素數或素數或兩個一起求*/
{
while(i<=x) /*i從3開始,一直到輸入的X大為止。*/
{
if(a==51)c=prime_super(i);/*如果主調涵數傳來的值為‘3’,要求求N以內的所有超級素數*/
else c=prime(i); /*如果主調涵數傳來的值不為‘3’,要求求N以內的所有素數*/
if(!c)
/*返回為1時做以下程序*/
{
if(a==53) /*如果主調涵數傳來的值為'5',要求求N以內所有素數與超級素數.*/
{
if(!(c=prime_super(i)))/*就在求素數的同時調用prime_super(i)涵數求超級涵數*/
{
總結
以上是生活随笔為你收集整理的c语言十万以内超级素数,用C语言求素数的优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十字交叉链表c语言,C语言课程设计报告—
- 下一篇: c语言for循环加法,BigDecima