水题 有t组数据 每组数据有a b 两个数 求a b之间有多少个素数 打表筛选即可 思路:先打一个素数表 找到第一个大于a的素数的倍数j 从j开始筛 筛到b为止 用flag标记 然后筛第二个素数 一直筛到sqrt(b)为止 剩下的就都是素数了 水题
分类:
其他好文 时间:
2016-03-19 21:24:16
阅读次数:
468
http://poj.org/problem?id=2773 说实话这道题。。一点都不Happy好吗 似乎还可以用欧拉函数来解这道题,但正好刚学了容斥原理和二分,就用这个解法吧。 题解:要求输出[1,m]中与m互质的第k个数,先打表,找到m的所有质因数,然后用二分实现,最开始区间为[1,2^60],...
分类:
移动开发 时间:
2016-03-18 21:40:58
阅读次数:
207
参考:http://blog.csdn.net/once_hnu/article/details/6302283 素数,就是只有1和自身两个约数的正整数。2是最小的素数。根据定义,我们就可以直接判断一个数字n是否是素数。优化后的复杂度是O(n*sqrt(n))。原因的话:http://www.goo
分类:
其他好文 时间:
2016-03-05 21:55:47
阅读次数:
226
1 void daa() 2 { 3 int k=0; 4 for(int i=2;i<100000;i++) 5 { 6 if(x[i]==0) 7 { 8 prime[k]=i; 9 for(int j=i*2; j<100000; j+=i) 10 x[j]=1; 11 k++; 12 } 1
分类:
其他好文 时间:
2016-03-01 14:13:21
阅读次数:
105
题目链接:传送门 游戏规则: 没次能够将一堆分成两堆 x = a*b (a!=1&&b!=1)x为原来堆的个数,a,b为新堆的个数。 也能够将原来的堆的个数变成原来堆的约数y。y!=x。进行最后一次操作的人获胜。 分析: 也是一个去石头的游戏,因此我们仅仅须要将全部情况的sg值异或起来就好了。 我们
分类:
其他好文 时间:
2016-02-27 20:38:00
阅读次数:
181
埃式筛法:给定一个正整数n(nusing namespace std;bool pri[1000000+10];bool ispri[10000000+10];//ispri[i-a]=true代表i是素数void getpri(){ memset(pri,true,sizeof(pri));...
分类:
其他好文 时间:
2016-01-25 16:55:43
阅读次数:
179
其原理就是先将2-n之内的所有数存在一个数组里,初始化所有数全为素数,然后从2开始寻找,只要标记是素数便将他的所有倍数的标记都改为合数,依次类推。时间复杂度为O(nloglogn)。代码实现1 void prime_table()2 {3 for(int i=2;(LL)i<=n;i++) ...
分类:
其他好文 时间:
2016-01-25 12:48:46
阅读次数:
126
折腾了一晚上很水的数论,整个人都萌萌哒主要看了欧拉筛和素数筛的O(n)的算法这个比那个一长串英文名的算法的优势在于没有多次计算一个数,也就是说一个数只筛了一次,主要是在%==0之后跳出实现的,具体的解释看的迷迷糊糊,特别是欧拉函数的求解http://blog.csdn.net/lerenceray/...
分类:
其他好文 时间:
2016-01-08 23:32:14
阅读次数:
322
模版整理:晒素数void init(){ cas = 0; for (int i = 0 ; i 1) { res[cnt++] = x; tot++; }大素数筛。1-2^31内某...
分类:
其他好文 时间:
2015-12-09 23:16:58
阅读次数:
429
1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 int prime[1000000]; 9 int vis[1000000];10 int normal_sieve(int n)1.....
分类:
其他好文 时间:
2015-11-30 00:54:13
阅读次数:
167