简单不过的程序,超级素数的计算。注意最高位可选的数与其他位有所不同,其他位的数字可排除偶数,减少运算量。一次编译,一次AC。
顺便查了下作素数测试的Miller Rabin算法,随机算法学过很久很久了,这算是经典的一个。
原题链接:
[url]http://ace.delos.com/usacoprob2?a=bFftpewR5eD&S=sprime[/url]
顺便查了下作素数测试的Miller Rabin算法,随机算法学过很久很久了,这算是经典的一个。
原题链接:
[url]http://ace.delos.com/usacoprob2?a=bFftpewR5eD&S=sprime[/url]
/*
ID: blackco3
TASK: sprime
LANG: C++
*/
#include <fstream>
#include <math.h>
using namespace std;
int prime[]={2,3,5,7}, n_prime=4 ;
int org[]={1,3,5,7,9}, n_org=5 ;
int n_digit ;
ofstream fout("sprime.out");
inline int is_prime(int num) {
for( int i=2; i*i<=num; i++)
if( !(num%i) )
return 0;
return 1;
}
void get_sprime(int rank, int cur)
{
if( rank==n_digit ){
fout << cur << endl ;
return ;
}
for( int i=0; i<n_org; i++ ){
int next = cur*10+org[i] ;
if( is_prime(next) )
get_sprime(rank+1,next);
}
}
int main()
{
ifstream fin("sprime.in");
fin >> n_digit ;
int cur_sum ;
for( int i=0; i<n_prime; i++){
cur_sum=prime[i] ;
get_sprime(1,cur_sum);
}
return 0;
}
本文介绍了一个简单的程序,用于计算超级素数。通过优化算法减少运算量,并使用MillerRabin算法进行素数测试。代码实现了一次编译和一次AC。
673

被折叠的 条评论
为什么被折叠?



