筛选法求素数:
筛选素数的方法不是直接判断一个数是不是素数,而是将不是素数的数全部去除,剩余的就是素数了。
1.如果区间包含1,首先将1标记为非素数。
2.从下一个最小的素数a开始,将该素数的倍数(2a,3a,……,ka)全部标记为非素数。
3.从a的后面找下一个最小的素数,重复2操作。
4.重复2,3操作,直到所有元素都筛选完为止。
例如:筛选1到25之间的素数
①按部就班地按上面...
分类:
其他好文 时间:
2014-08-08 16:02:36
阅读次数:
335
题目来源:Light OJ 1356 Prime Independence
题意:给你n个数 选出最多的数构成一个集合使得任何2个数不是另外一个数的质数倍 x!=k*y
思路:矛盾的2个数连边 并且所有数分成质因子数为奇数和偶数两部分 以质因子奇偶不同构建二分图 同奇 同偶的数一定不是另外一个数的质数倍
判断矛盾 首先对每个数因子分解 例如x 有a1个p1质因子 a2个p2质因子...an...
分类:
其他好文 时间:
2014-08-06 19:09:32
阅读次数:
303
掌握了容斥原理后,便会发现,这是一道简单的容斥原理的题。
题目描述:给定A, B, N (1 <= A <= B <= 10^15,1<=N <= 10^9).求[A,B]区间内与N互素的数的个数
看到这道题,自然联想到跟素数相关的知识,所以在做这道题之前,我忍不住整理一下关于素数的基本算法。
1、素数筛选法(求1~n的素数):http://blog.csdn.net/yzj577/article/details/38147433
2、验证素数:http://blog.c...
分类:
其他好文 时间:
2014-07-27 11:27:22
阅读次数:
291
#include
int main()
{
int i,j,a[505]={0};
for(i=1;i<=500;i++)
a[i]=1;
for(i=2;i<=500;i++)
if(a[i])
for(j=i+i;j<=500;j+=i)
a[j]=0;
for(i=2;i<=500;i++)
if(a[i])
printf("%d ",i);
p...
分类:
其他好文 时间:
2014-07-20 09:30:21
阅读次数:
268
题目简单的计算A,B之间有多少个素数只是测试数据有是负的//AC//A和B之间有多少个素数//数据可能有负的!!!#include#include//素数筛选法int pri[100000+10];//1 合数, 0 素数void Prime(){ memset(pri,0,sizeof(pr...
分类:
其他好文 时间:
2014-07-19 20:04:10
阅读次数:
266
题目链接:uva 10140 - Prime Distance
题目大意:给出一个范围,问说该范围内,相邻的两个素数最大距离和最小距离。
解题思路:类似素数筛选法,起始位置有L开始,直到超过R,处理出素数之后就好办了。
#include
#include
#include
const int maxn = 1e6;
typedef long long ll;
int cp,...
分类:
其他好文 时间:
2014-07-03 16:00:49
阅读次数:
213
题目来源:Light 1289 LCM from 1 to n
题意:。。
思路:从1到n 打过某个数是以一个素数的几次方 那么答案就乘以这个素数
主要是筛选素数 存不下 位优化 一个整数32位标记32个数 内存缩小32倍
是学习别人的
#include
#include
#include
#include
using namespace std;
const int maxn ...
分类:
其他好文 时间:
2014-06-10 18:05:45
阅读次数:
250
一般的素数筛选的思路是从2开始,将所有2的倍数去掉,然后从3开始,将3的倍数去掉,然后从下一个素数x开始,将x的倍数去掉...,这样可以将所有素数的倍数去掉。实现代码如下:
1 int PrimeOld() 2 { 3 int i; 4 5 cnt = 0; 6 memse...
分类:
其他好文 时间:
2014-05-28 04:22:15
阅读次数:
180
题目来源:POJ 2689 Prime Distance
题意:给出一个区间L R 区间内的距离最远和最近的2个素数 并且是相邻的 R-L
思路:一般素数筛选法是拿一个素数 然后它的2倍3倍4倍...都不是 然后这题可以直接从2的L/2倍开始它的L/2+1倍L/2+2倍...都不是素数
首先筛选出一些素数 然后在以这些素数为基础 在L-R上在筛一次因为 R-L
#include
#i...
分类:
其他好文 时间:
2014-05-15 19:51:58
阅读次数:
313
1 /** 2 给定一定范围求其内的素数 3 4 注意: 5 **/ 6 7 #include 8
#include 9 #include 10 using namespace std;11 #define maxn 100000012 long long
prime[500000];1...
分类:
其他好文 时间:
2014-05-13 19:50:13
阅读次数:
242