首页 > 其他分享 >伪素数列

伪素数列

时间:2022-12-08 15:26:34浏览次数:43  
标签:正整数 23 int 样例 素数 输入

题目描述

如果一个正整数A是素数,或者A的每一位数字都是素数,我们称A为伪素数。例如,23是素数,235的每一位数字都是素数,所以23和235都是伪素数,而135不是素数,其中的数字1不是素数,所以135不是伪素数。老师给了小南一个任务,让他在一个称作伪素数列的集合An={2,3,5,7,11,13,17,19,22,23,25,…}中快速找到第k个伪素数,聪明的你能帮他完成任务吗?

输入

多组样例。每行输入一个样例包括一个正整数k(1≤k≤5000)。

输出

对每一个输入的k,输出一个正整数x,表示数列An中的第k项的值,其值范围不会超过int型。每个输出占一行。

样例输入 Copy

1
5
10

样例输出 Copy

2
11
23
#include <stdio.h>
#include <math.h>

int isprime(int a){
    int k=1,i;
    if(a==1) k=0;
    else
    {
        for(i=2;i<=sqrt(a);i++){
            if(a%i==0) k=0;
        }
    }
    
    return k;
}

int main(void){
    int i=1,x=2,k=1,a[4]={2,3,5,7},b[5005]={0};
    b[0]=2;
    for(i=1;i<=5000;)
    {
        x++;
        int m=x;
        if(isprime(x)){
            b[i]=x;
               i++;
        }
        else{
            while(m){
                k=1;
                if(!((m%10)==a[0]||(m%10)==a[1]||(m%10)==a[2]||(m%10)==a[3])){
                    k=0;
                    break;
                }
                m/=10;
            }
            if(k){
                b[i]=x;
                i++;
            }
        }
    }
    int t;
    while (scanf("%d",&t)!=EOF)
    {
        printf("%d\n",b[t-1]);
    }
    return 0;
}

 

标签:正整数,23,int,样例,素数,输入
From: https://www.cnblogs.com/messing1758954258/p/16966169.html

相关文章