时间限制:1000MS 内存限制:256000KB
题目描述
纯粹素数是这样定义的:一个素数,去掉最高位,剩下的数仍为素数,再去掉剩下的数的最高位,余下的数还是素数。这样下去一直到最后剩下的个位数也还是素数。
求出所有N以内的纯粹素数。
输入
仅一行,只有一个数N,N < 10000000;
输出
若干个用一个空格隔开的纯粹素数。
输入样例
23
输出样例
2 3 5 7 13 17 23
得90分的看这里
算法思路:
对于每一个数(无论质数合数)x,筛掉所有小于x最小质因子的质数乘以x的数。比如对于77,它分解质因数是711,那么筛掉所有小于7的质数77,筛掉277、377、5*77。
1、没有重复筛。
我们假设一个合数分解成p1p2p3,并且保证p1<p2<p3。我们知道,筛掉这个合数的机会有:p1和p2p3,p2和p1p3,p3和p1p2。但我们知道,我们选择的那个质数必须小于那个合数的最小质因子。比如p2和p1p3,因为p2>p1,所以这样是筛不到的。唯一会筛的是第一种:p1和p2*p3。
2、没有漏筛。
还是假设把这个合数分解质因数abc,保证a<b<c然后我们设s=bc,s肯定小于刚才那个合数,说明肯定对于它已经筛过,然后a肯定小于s,因为s=bc,并且a是最小的因子。说明a*s也就是这个合数一定筛过。
#include<bits/stdc++.h>
using namespace std;
int n,
求N以内纯粹素数的算法思路

该博客探讨了纯粹素数的定义,即一个素数在逐次去掉最高位后仍保持素数状态。针对给定的整数N,任务是找出所有N以内的纯粹素数。博主分享了一种算法思路,通过筛法避免重复和漏筛,确保正确筛选出所有符合条件的纯粹素数。文章适合对算法感兴趣的读者,尤其是关注素数和质因数分解的开发者。
最低0.47元/天 解锁文章
2751





