首页 > 其他分享 >镜面质数 题解

镜面质数 题解

时间:2024-08-03 16:16:39浏览次数:9  
标签:题解 质数 RGB 镜面 反转 镜像 textcolor define

题目id:20313

题目描述

如果一个质数镜像反转(即将该数各个位上数字反转)后仍然是质数,那么就称这个质数为镜像质数。例如质数\(13\)反转后为\(31\),则\(13\)为一个镜像质数。
现在给定一个整数\(N\),请求出整数\(1\sim N\)范围内有几个镜像质数。
注意:求范围内的镜像质数时,质数和镜像反转后的数都需在范围内。

解题思路

由于该题数据范围较大,我在那儿对着数据开数组玄学\(\textcolor[RGB]{82,196,26}{ Accepted }\)了。
咳咳,言归正传,\(1\leq N\leq 5×10^7\),就这么大的范围,你\(O(N\sqrt{N})\)能过才怪,怎么这么多人用朴素筛(教练原话,也包括本蒟蒻,只有\(50pts\ QwQ\))。
所以,我们这题思路非常明了:欧拉筛!
用欧拉筛筛出小于\(N\)的所有质数,再从\(1\)枚举到\(N\),如果这是个质数(欧拉筛有标记是否质数的数组)就将其反转(各神犇应该都会写吧),在判断反转后数是否小于\(N\)及是否质数,若是,答案加\(1\);若否,无事发生。

AC Code

#include<bits/stdc++.h>
#define N 4000007
#define INF 1e18
#define MOD 1000000007
#define LL long long
#define pb push_back
#define lb long double
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define IOS ios::sync_with_stdio(0),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;
LL n,ans,p[N],cnt;
bool ip[50000007];
int main()
{
    IOS;
    cin>>n;
    for(int i=2;i<=n;++i)
    {
        if(!ip[i])
            p[++cnt]=i;
        for(int j=1;j<=cnt&&p[j]*i<=n;++j)
        {
            ip[p[j]*i]=1;
            if(i%p[j]==0)
                break;
        }
    }
    for(LL i=2;i<=n;++i)
    {
        LL t=i,sum=0;
        if(!ip[i])
        {
            while(t)
            {
                sum=sum*10+t%10;
                t/=10;
            }
            if(sum<=n&&!ip[sum])
                ++ans;
        }
    }
    cout<<ans;
    return 0;
}

Tip

if(sum<=n&&!ip[sum])这句中sum<=n必须放在!ip[sum],否则你会因为数组越界而玄学\(\textcolor[RGB]{52,152,219}{Time\ Limit\ Exceeded}\),要是你数组开太大,又会喜提\(\textcolor[RGB]{157,61,207}{Memory\ Limit\ Exceeded}\)。

标签:题解,质数,RGB,镜面,反转,镜像,textcolor,define
From: https://www.cnblogs.com/988176-/p/18340621

相关文章

  • leetcode数论(2523. 范围内最接近的两个质数)
     前言经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。现阶段开始专项练习。描述给你两个正整数 left 和 right ,请你找到两个整数 num1 和 num2 ,它们满足:left<=nums1<nums2<=right  。nums1 和 nums2 都是 质数 。nums2-nums1......
  • CF1946F Nobody is needed 题解
    Nobodyisneeded推销我的洛谷博客。题意多组数据。给定一个长度为\(n\)的排列\(a\),你需要回答\(q\)组询问,每组询问给出\(l,r\),求有多少个子序列\(t\)使得:\(l\leqslantt_1<t_2<\cdots<t_k\leqslantr\)。\(a_{t_i}|a_{t_{i+1}}(1\leqslanti<k)\)......
  • NSSCTF Web 题解 Write up
    NSSCTFWeb题解Writeup一、Do_you_know_http1、开题2、分析页面显示请使用“WLLM”浏览器,我没听说过“WLLM”浏览器,那首先去User-Agent修改访问的浏览器。用HackBar分析,将UA的值改成WLLM。用EXECUTE请求页面显示你只可以在本地正常阅读,并给出了ip。那简单,还是用HackB......
  • AGC013B 题解
    注意到只要随便dfs,如果没有可以走的点,说明这个端点满足要求。因为有两个端点,所以从同一个点开始搜两次,拼在一起就行了。#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=1e5+5;vector<int>e[N];intn,m;boolvis[N];voiddfs(in......
  • AGC009B 题解
    注意到如果把每一对胜者败者连边,可以得到一颗树:(例子)但是因为胜者每次只能和一个败者打,所以要用类似多叉转二叉的方法,让有不止一个孩子的节点变成有一个孩子和一个虚点。如图,原来\(1\)有三个儿子\(2,3,4\),通过转换,变成了上图。上图可以直接变成对战图(\(x2\tox1\to1)\):(原......
  • AGC049A 题解
    弱化版:CF280CGameonTree(有向图的限制变成一棵根节点为1的外向树)弱化版解法:根据期望线性性,\(Ans=\sum_{i=1}^nE(p_i)\)。其中\(p_i\)是\(i\)被选到的概率。因为对于\(i\)和\(i\)的祖先节点,某个点在这些店里是第一个备选的概率相同。所以\(p_i=\dfrac{1}{dep_i}\)......
  • joisc2017 D3T1 长途巴士 题解
    joisc2017D3T1长途巴士题解这是学校ACM欢乐赛的题,赛时想到做法了,但是因为我各种唐诗没写出来翻了转化题面我们发现,只可以踢掉检查站前面一个连续段的接水人,并且不能踢掉司机,考虑画出对整个路程表示的线段上图几个小点是检查点,考虑在每个检查点之前踢掉一段的人,容易发......
  • ABC269F 题解
    注意到第\(i\)行和第\(i+2\)行被删除的格子的排列顺序相同,格子上的数差了\(2m\)。于是处理出第\(i,i+1\)行的答案\(a_i,a_{i+1}\),有值的格子的个数\(c_i,c_{i+1}\)。令\(s(i)=\dfrac{(i-1)i}2\),也就是\(\sum_{j=1}^{i-1}j\)。第\(i,i+2,i+4\cdots\)行的和:\(a_i\t......
  • ABC268F 题解
    考虑贪心。设字符串\(S\)里数字之和为\(S_d\),X的个数为\(S_c\)。考虑相邻的两个字符串\(A,B\)的贡献:考虑临项交换,这只影响到相邻两个串的相互贡献。注意到交换\(A,B\)只会影响到\(B_dA_c,A_dB_c\),那么产生的贡献\(\Delta=B_dA_c-A_dB_c\)。因为对于最优解,\(\Delta......
  • ACM第三次测试部分题解(B,C,D,E,J)
    (B)N^N(简单快速幂模板,直接套用就行)点击查看代码#include<iostream>usingnamespacestd;longlonga,b,n;intmain(){cin>>n;while(n--){scanf("%lld",&a);signedlonglongA=a%10,sum=1;while(a)......