首页 > 其他分享 >素数串

素数串

时间:2022-12-08 15:25:55浏览次数:29  
标签:输出 int 样例 整数 素数 YES

题目描述

中南CC君最近迷上了素数,素数是指除了1和本身外不能被其他数整除的正整数,2是最小的素数。他发现有一种叫素数串的整数很有意思。它要求从该整数左边开始,每取3位数字构成的整数是素数,剩余的不够3位的整数也是素数。如23311317就是素数串,因为233,113,17都是素数,但是233111就不是,因为111不是素数。给你一个n(1≤n≤101000),你能帮CC君判断一下是素数串整数吗?

输入

多组样例。每行一个样例包含一个整数n。

输出

对于每一个输入的n,输出一个结果,如果是素数串整数,输出"YES",否则输出"NO"。每个输出占一行。

样例输入 Copy

2
3892
100733

样例输出 Copy

YES
YES
NO
#include<stdio.h>
#include<string.h>

int b[1005]={0};
int len;
char str[1005];
void Eratosthenes(){
    b[0]=b[1]=1;
    for(int i=2;i*i<=1000;i++)
        if(b[i]==0)
            for(int j=i*2;j<=1000;j+=i)
                b[j]=1;
}
int check(){
    int i=0;
    while(i+3<len){    
        int n=0; 
        for(int j=i;j<i+3;j++)
            n=n*10+str[j]-'0';
        if(b[n]==1) 
            return 0;    
        i+=3;
    }
    
    int n=0;
    
    for(int j=i;j<len;j++)
        n=n*10+str[j]-'0';
 
    if(b[n]==1) return 0;    
    return 1;
}
int main(){
    Eratosthenes();
     
    while(scanf("%s",str)!=EOF){
        len=strlen(str);
        
        if(check()==1)
            printf("YES\n");
        else
            printf("NO\n");    
    }
    return 0;
} 

 

标签:输出,int,样例,整数,素数,YES
From: https://www.cnblogs.com/messing1758954258/p/16966172.html

相关文章