超級素數

一個素數,依次從最高位去掉一位,兩位……若得到的都是素數,且各數字不為0,則稱為超級素數。

語言算法

簡單C語言算法:

/*TC2.0調試成功*/

#include "stdio.h"

#include "math.h"

/*判斷是否為素數*/

int IsPrime(long number);

/*判斷此數是否為超級素數函式*/

int IsSuperPrime(long number);

/*求100~9999之間所有的超級素數個數,和,及最大值*/

void main()

{

long spn = 0;

long spm = 0;

long sps = 0;

for( long i = 101; i<= 9997; i += 2)

{

if(IsSuperPrime(i)==1)

{

sps += i;

spn++ ;

spm = i;

}

}

printf("sum=%ld,Total=%d,Max=%d",sps,spn,spm);

getchar();

}

/*判斷是否為素數*/

int IsPrime(long number)

{

if(number==1)

{

return 0;

}

for(int j=2; j<=sqrt(double(number)); j++)

{

if(number%j==0)

{

return 0;

}

}

return 1;

}

/*判斷此數是否為超級素數函式*/

int IsSuperPrime(long number)

{

if(IsPrime(number)==1)

{

do{

number=number/10;

if(IsPrime(number)==0)

{

return 0;

}

}

while(number>=10);

return 1;

}

else

{

return 0;

}

}

最佳化思想

由於超級素數具有一個特點:

如果有一個數不是素數的話的那么就是非超級素數了,這樣判斷對於位數超級大的數的循環是非常大的:

可以採取的最佳化策略有:

判斷是不是偶數:如果在要判斷的數字裡面發現了"2","4","6","8","0"那么很明顯這個就不是超級素數了.

還有就是判斷是不是3的倍數:

有這么一個規律:當一個數的各個位數的和加起來是3的倍數的時候,那么這個數就是3的倍數.例如123(1+2+3=2*3),那么將這個數的各個位加起來就能夠實現3的判斷.

以上兩點最佳化:可以很大程度的減少判斷的複雜度.

相關詞條

熱門詞條

聯絡我們