**
题目是m位超级素数本身是素数,去掉一位后m-1位素数,去掉两位m-2位素数等等,例如137,去掉1后,37是2位素数,接着去掉3后是一位素数,所以是超级素数。而103不是,去掉1后,剩下3,不可能是2位素数。
**
int judge(int n) //判断素数
{
for(int i =2; i<=sqrt(n); i++)
if(n % i == 0)return 0;
return 1;
}
int superSu(int m)
{
int last; //最后一个素数
int x = pow(10,m-1); //计算区间
int y = pow(10,m);
int sum = 0; //统计素数
int p;
for(int i = x; i<y; i++)
{
p = i;
int flag = 1;
while(p) //如果一个数中间有0的话,那么一定不会是超级素数
{
int t = p % 10;
p /=10;
if(t == 0)
{
flag = 0;
break;
}
}
if(!flag)continue; //如果有0,则跳过
p = i;
int u = m-1;
while(u > 0)
{
if(judge(p))
{
p = p % (int)pow(10,u--); // 比如 96542,想要得到6542,就对96542 % 10000,当U=0时,正好只剩下个位,这里需要指出的是pow函数返回double类型,需要转化一下
}
else
{
flag = 0; //其中只要有一项不是素数,就排除
break;
}
}
if((p == 3 || p == 7 )&& flag == 1) //素数最末尾一定是3 or 7,如果是9,那么一定不是一位素数,同理。
{
sum++; //统计个数
last = i; //记录最后一位
}
}
return last;
}