xtu oj Prime

时间:2024-10-20 19:39:05

样例输入
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);
	}
}