P1217 [USACO1.5]回文质数 Prime Palindromes(素数筛法/打表)

P1217 [USACO1.5]回文质数 Prime Palindromes(素数筛法/打表)

一:埃氏筛(时间复杂度——nloglogn)

重点:一个数x是合数,则它的倍数也是合数

//用埃氏筛生成质数表
const int N=1e8;
bool prime[N];

void a_prime(int b){
   
    memset(prime,1,sizeof(prime));//初始化默认全为质数
    prime[0]=prime[1]=0;//0和1不是质数
    int k=sqrt(b);
    for(int i=2;i<=k;i++){
   
        if(prime[i]){
   
            for(int j=2;j<=b/i;j++)//i*j<b
                prime[i*j]=0;//质数的倍数绝对不是质数
        }
    }
}
//最后数组prime中,值为1的数组下标是质数

二、欧拉筛/线性筛(时间复杂度——n)——最小质因子

在埃氏筛的基础上进行优化,避免一个合数重复标记(如:6被2和3同时都筛了一遍)

//筛法求素数的同时也得到了每个数的最小质因子
const int N=1e8;
bool prime[N],vis[N];

void o_prime(int b){
   
	memset(vis,1,sizeof(vis));//初始化默认全为质数
    vis[0]=vis[1]=0;//0和1不是质数
    int cnt=0;
    for(int i=2;i<=b;i++){
   
    	if(vis[i])//i为质数
    		prime[++cnt]=i;
    	for(int j=1;j<=cnt && i*prime[j]<b;j++){
   
    		vis[i*prime[j]]=0;//质数的倍数都不为质数
    		if(i%prime[j]==0)//最小质因子
    			break;
    	}
    }
}

P1217 [USACO1.5]回文质数 Prime Palindromes

题目描述

因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。

写一个程序来找出范围 [a,b] (5≤a<b≤100,000,000)( 一亿)间的所有回文质数。

输入格式

第 1 行: 二个整数 a 和 b .

输出格式

输出一个回文质数的列表,一行一个。

输入输出样例

输入 #1复制

5 500

输出 #1复制

5
7
11
101
131
151
181
191
313
353
373
383

AC——打表

打表大法好,下次一定记得用!!!(小心最后一个点RE)

#include <bits/stdc++.h>

using namespace std;

int arr[800]={
   0,2,3,5,7,11,101,131,151,181,
191,313,353,373,383,727,757,787,797,
919,929,10301,10501,10601,11311,11411,12421,12721,
12821,13331,13831,13931,14341,14741,15451,15551,16061,
16361,16561,16661,17471,17971,18181,18481,19391,19891,
19991,30103,30203,30403,30703,30803,31013,31513,32323,
32423,33533,34543,34843,35053,35153,35353,35753,36263,
36563,37273,37573,38083,38183,38783,39293,70207,70507,
70607,71317,71917,72227,72727,73037,73237,73637,74047,
74747,75557,76367,76667,77377,77477,77977
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值