样例输入
3
25
237
46
样例输出
2
5
0
这道题目关键在于将整数分离成1-cnt位数 如237分离
1位 2 3 7 2位 23 37 三位 237
利用len和right实现双重循环。具体实现看下面的代码。
#include<stdio.h>
#define ll long long
int Judge(ll n){
ll i;
int flag=1;
if(n==0||n==1)return 0;//考虑特殊情况
for(i=2;i*i<=n;i++){
if(n%i==0){
flag=0;
break;
}
}
return flag;
}
int main(){
int T;
scanf("%d",&T);
while(T--){
ll n;
scanf("%lld",&n);
int a[10]={};
int i,j,t=0;
while(n){
a[t]=n%10;
n/=10;
t++;
}
int left=0,right,len=0;
ll sum=0,cnt=0;
while(len<t){
while(left<=t-1){
sum=0;
right=left+len;
if(right>=t)break;//注意右指针的范围
for(i=left+len;i>=left;i--){
sum=sum*10+a[i];
}
if(Judge(sum)==1)cnt++;
left++;
}
//每一轮len运算要让left=0
left=0;
len++;
}
printf("%lld\n",cnt);
}
}