题意:求所有N位的superprime rib,类似7331这样的数就叫做4位superprime rib。因为7,73,733,7331均为质数。
解题思路:
- 可能是用的BFS算法吧(叫法不一定对)
- 从1位superprime rib开始进行BFS(输入为1位superprime rib),如果超过N位则终结,如果刚好N位则输出并终结。
- 如果不满足上述条件则添加1位(添加的这一位只可能是奇数)。添加后如果检测不为质数,则终结BFS。否则继续BFS。
代码:
/*
ID: zc.rene1
LANG: C
PROG: sprime
*/
#include<stdio.h>
#include<math.h>
FILE * fout;
int min, max;
int is_prime(int num){
int i;
if(num<=1){
return 0;
}
for(i=2; i<=sqrt(num); i++){
if(num%i==0) return 0;
}
return 1;
}
void bfs(int num){
int i, temp_num;
if(num>max) return ;
else if(num>=min){
fprintf(fout, "%d\n", num);
return ;
}
else{
for(i=1; i<10; i+=2){
temp_num=num*10+i;
if(is_prime(temp_num)){
bfs(temp_num);
}
else{
continue;
}
}
}
}
int main(void){
FILE *fin=fopen("sprime.in", "r");
fout=fopen("sprime.out", "w");
int N;
int i;
int arr[4]={2, 3, 5, 7};
fscanf(fin, "%d", &N);
min=pow(10, N-1);
max=10*min-1;
for(i=0; i<4; i++){
bfs(arr[i]);
}
return 0;
}
本文介绍了一种使用BFS算法求解特定位数Superprimerib数的方法。Superprimerib数是指从任一位开始截取的子串均为质数的整数。通过递归添加可能的数字,并检查新形成的数是否为质数来实现。

456

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



