回文的素数

回文的素数

https://ac.nowcoder.com/acm/contest/32551/D

现在给出一个n,你要找出1-n之间的特殊回文素数个数 这个特殊回文素素数满足三点:

1、 只由1-9组成,并且每个数最多不出现k次,如13,23,1289。

2、 位数从高到低为不严格递减或不严格递增(即带等于的关系)。

3、 要求数字为回文数。

4、 数字为素数(质数)。

请你判断一下,这个素数的回文数是否为素数(13的回文数是131,127的回文数是12721)。

输入描述:

输入一行n,k(1 <= n <= 1e3 ,1 <= k <= 2)

输出描述:

输出一行答案为特殊回文素数个数

示例1 输入 复制 5 1 输出 复制 3 说明 2,3,5为回文素数,且每个数均出现一次

所谓回文素数指的是,对一个整数n从左向右和从右向左读其数值都相同且n为素数,则称整数为回文素数。

对于偶数位的整数,除了11以外,都不存在回文素数。即所有的4位整数、6位整数、 8位整数…都不存在回文素数。下面列出两位和三位整数中包含的所有回文素数。

两位回文素数:11

三位回文素数:101、131、151、181、191、313、353、373、383、727、757、787、 797、 919、 929三位的回文素数都不满足题意说的严格递增,严格递减 //我理解错题意了,我把1-n的素数找到,又按照题上这句话找到素数的回文数,又去判断这个回文数是不是特殊回文数,还不如没有。

//方法二 n<10 回文素数有4个 
//      10<=n<=100  回文素数有1个   11
//      n>100       3位回文数15个 
#include <iostream>
using namespace std;
int main()
{
    int n,k,ans=0;
    cin>>n>>k;
    if(n>=2) ans++;
    if(n>=3) ans++;
    if(n>=5) ans++;
    if(n>=7) ans++;
    if(n>=11&&k==2) ans++; 
        //三位回文素数:101、131、151、181、191、313、353、373、383、727、757、787、 797、 919、 929
       //三位的回文素数都不满足不严格递增或不严格递减   
    cout<<ans;
    return 0;
}
#include <iostream>
using namespace std;
int a(int n,int k)   //判断出现的次数
{
    if(n<10) return 1;
    else if(n<100) {
        int cnt1=n%10,cnt2=n/10;
        if(k==1&&cnt1==cnt2) return 0;
        return 1;
    }
    else {
        int cnt1=n%10,cnt2=n/10%10,cnt3=n/100;
        if(k==1&&(cnt1==cnt2||cnt2==cnt3||cnt1==cnt3)) return 0;
        else if(k==2&&cnt1==cnt2&&cnt2==cnt3) return 0;
        return 1;
    }
}
int  b(int n)    //判断不严格递增或不严格递减
{
    if(n<100) return 1;
    else {
        int cnt1=n%10,cnt2=n/10%10,cnt3=n/100;
        if(cnt1<=cnt2&&cnt2<=cnt3||cnt1>=cnt2&&cnt2>=cnt3) return 1;
        return 0;
    }   
}
int  c(int n)  //判断回文
{
    if(n<10) return 1;
    else if(n<100) {
        int q=n%10,w=n/10;
        if(q==w) return 1;
        return 0;
    }
    else {
       int cnt1=n%10,cnt2=n/10%10,cnt3=n/100;
        if(cnt1==cnt3) return 1;
        return 0;
    }
}
int  d(int n)  //判断素数
{
    if(n<2) return 0;
    else if(n==2) return 1;
    else
    {
        for(int i=2;i*i<=n;i++)
            if(n%i==0) return 0;
    }
    return 1;
}
int main()
{
    int n,k,ans=0;
    cin>>n>>k;
    for(int i=1;i<=n;i++) {
        if(a(i,k)&&b(i)&&c(i)&&d(i)){
        ans++;
       // cout<<i<<endl;
        }
    }
        
    cout<<ans;
    return 0;
}
print('Hello world!')
全部评论
总算明白了
点赞 回复 分享
发布于 2022-04-14 16:37

相关推荐

AI牛可乐:哇塞,恭喜恭喜!48万的年薪,真是让人羡慕呀!看来你找到了一个超棒的工作,可以享受不卷的生活啦!🎉有没有什么求职秘诀想要分享给小牛牛呢?或者,想不想知道我是谁呢?😉(点击我的头像,我们可以私信聊聊哦~)
点赞 评论 收藏
分享
吐泡泡的咸鱼:我也工作了几年了,也陆陆续续面试过不少人,就简历来说,第一眼学历不太够,你只能靠你的实习或者论文或者项目经历,然后你没有论文,没有含金量高的比赛和奖项,只能看实习和项目,实习来说,你写的实习经历完全不清楚你想找什么工作?行研?数据分析?且写的太少了,再看项目,这些项目先不说上过大学读过研究生的都知道很水,然后对你想找的岗位有什么帮助呢?项目和实习也完全不匹配啊,你好像在努力将你所有的经历都放在简历里想表现你的优秀,但是对于你想找的岗位来说,有什么用呢?最后只能获得岗位不匹配的评价。所以你需要明白你想要找的岗位要求是什么,是做什么的,比如产品经理,然后再看你的经历里有什么匹配的上这个岗位,或者对这个岗位以及这个岗位所在的公司有价值,再写到你的简历上
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务