一、线性筛法众所周知。。。线性筛就是在O(n)的时间里找出所有素数的方法code:void get_prime(int N){ int i, j, k; memset(Flag, sizeof(Flag), 0); for (i = 2; i N) break; ...
分类:
其他好文 时间:
2014-11-01 13:25:26
阅读次数:
152
2818: Gcd
题目:
给定整数N,求1
数对(x,y)有多少对. 1
算法:
求解 g = Gcd(x,y)为素数,转换问题成x/g,y/g互质。所以,只要求出[1,N/pi]内互质的对数(pi为1....N之间的素数)。枚举pi就可以了。而这里就可以用到线性的欧拉求解,普通欧拉为O(nlognlogn)。
/*
线性素数加欧拉筛法O(N)
题目:...
分类:
其他好文 时间:
2014-10-31 20:45:54
阅读次数:
184
具体筛法是:先把n个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就...
分类:
编程语言 时间:
2014-10-31 18:38:36
阅读次数:
195
var tot,i,j,k,m,n:longint; prime:array[0..100000] of boolean; p:array[0..100000] of longint;begin read(n); fillchar(prime,sizeof(prime),true); p...
分类:
其他好文 时间:
2014-10-28 21:13:10
阅读次数:
174
题目:求给顶一个数n,的所有的1 ≤ m ≤ n的m,使得gcd(m,n)≠ 1 且 gcd(m,n)≠ m。
分析:数论,素数筛法,欧拉函数。
设pi为n的第i个素数因,k1为第i个素数因子的个数,则有:
1 ≤ m ≤ n,gcd(m,n)= 1 的m的个数为欧拉函数;
欧拉函数:φ(n)= n *(1 - 1/...
分类:
其他好文 时间:
2014-10-28 09:25:08
阅读次数:
222
题目:找到整数区间[1,n]中多有的互质数对。
分析:数论,筛法,欧拉函数。在筛素数的的同时,直接更新每个数字的欧拉函数。
每个数字一定会被他前面的每个素数筛到,而欧拉函数的计算是n*π(1-1/pi);
其中,pi是n的素数因子,所以可以利用筛法来计算欧拉函数,然后求和;
注意,这时求出的欧拉函数为所有小于n的数m与...
分类:
其他好文 时间:
2014-10-27 14:25:36
阅读次数:
198
好吧……我不会欧拉筛也就罢了……傻逼筛法竟然这么长时间以来 一直RE ……源头竟然是 int 爆了。 1 #include 2 #include 3 using namespace std; 4 bool vis[70000]; 5 int a,b; long long ans; 6 void Sh...
分类:
其他好文 时间:
2014-10-27 12:39:04
阅读次数:
160
题目:计算一个给定数的欧拉函数(1~n-1中和n互质的数的个数)。
分析:数论,素数筛法,欧拉函数。
欧拉函数:φ(n)= n *(1 - 1/p1)*(1 - 1/p2)*(1 - 1/p3)*…*(1 - 1/pt);
这里利用筛法打表计算出50000内的素数,因为数据范围是1000000000内的,
所以,不...
分类:
其他好文 时间:
2014-10-21 12:25:42
阅读次数:
279
题目:
给出一个区间[L,R]求在该区间内的素数最短,最长距离。 (R
由数论知识可得一个数的因子可在开根号内得到。所以,我们可以打出5*10^4内得素数。然后,在用一次筛法把在[L,R]内得合数找到,则剩下的就是素数了。这里要用到离散化,把一个数 x - L 保存在数组里。因为,直接保存肯定不行,但是我们发现区间特点较小。所以,可以想到离散化。
#include
#i...
分类:
其他好文 时间:
2014-10-16 17:58:12
阅读次数:
223