写了一个打印出几位数的回文质数的程序,没法运行,想问一下怎么回事?
#include<iostream>#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int is_Prime(int x){ //判断一个数是不是质数
int t,i;
if(x==0 || x==1) return 0;
if(x==2 || x==3) return 1;
t=sqrt(x);
for(i=2;i<=t;i++){
if(x%i==0) return 0;
}
return 1;
}
int exponential(int x,int y){ //计算幂的函数
int i,s=1;
for(i=1;i<=y;i++){
s=s*x;
}
return s;
}
void dfs(int l,int len,int step,int sum){ //len表示总共需要尝试的数位个数,step表示现在准备尝试第几个数位
int i;
if(step==len+1){ //回文数已经放好了,验证是不是质数
if(is_Prime(sum)){
printf("%d\n",sum);
return;
}
}
if(step==1){ //放置首位和末位的数字,不为0,且末位必须是奇数
for(i=1;i<=9;i+=2){
dfs(l,len,step+1,sum+i*exponential(10,l-step)+exponential(10,step-1));
}
}
else if(step==len){ //放置最中间的数位
for(i=0;i<=9;i++){
dfs(l,len,step+1,i*exponential(10,l-step));
}
}
else{ //放置一般的数位
for(i=0;i<=9;i++){
dfs(l,len,step+1,sum+i*exponential(10,l-step)+exponential(10,step-1));
}
}
}
void f(int l){ //l代表几位数
int i;
if(l==1){
if(is_Prime(2)) printf("2\n");
if(is_Prime(3)) printf("3\n");
if(is_Prime(5)) printf("5\n");
if(is_Prime(7)) printf("7\n");
return;
}
else if(l==2){ //位数为2是,回文质数只有11
if(is_Prime(11)) printf("11\n");
return;
}
else if(l%2==0 && l!=2) return; //位数是偶数且不为2时,不存在回文质数
dfs(l,(l+1)/2,1,0); //位数是奇数且不为1时,调用dfs函数来计算
}
int main(void){
f(3);
return 0;
}
无法运行,求帮忙看一下怎么回事?