/*给定一个正整数N,求出[2,N]中的所有素数*/
#define maxn 1000000
boool vis[maxn];
void getprime(int n, int &tot, int ans[]) //筛法将合数筛掉,留下的则是素数 ,用于快速判断一个区间内的所有素数
{
fot = 0; //记录素数的个数
for (int i = 2; i<= n; i++)...
分类:
其他好文 时间:
2015-08-03 09:01:48
阅读次数:
186
F. Clique in the Divisibility Graph题目传送:Clique in the Divisibility Graph解法:筛法+DPAC代码:#include
#include
#include
#include
#include
#include
#include ...
分类:
其他好文 时间:
2015-07-31 10:38:06
阅读次数:
112
题意:f(i)表示i的质因子个数,给l和r,问在这一区间内f(i)之间任意两个数最大的最大公倍数是多少。解法:先用筛法筛素数,在这个过程中计算f(i),因为f(i)不会超过7,所以用一个二维数组统计前i个数中每个f(i)出现的次数,当询问l和r时,用num[r] - num[l - 1],得到这一区...
分类:
其他好文 时间:
2015-07-30 12:56:18
阅读次数:
100
2015 HDU 多校联赛 5317 RGCDQ 筛法求解...
分类:
其他好文 时间:
2015-07-30 00:45:35
阅读次数:
154
求满足n=i*j+i+j(0<i<=j)的i、j的种数。
第一种方法:首先这个等式可以化成(n+1)=(i+1)*(j+1),所以只要求出(n+1)的约数的种数即可。同时注意到i与j呈负相关,同时i小于等于j,所以只需要从2到sqrt(n+1)枚举(从2开始是因为i最小为1,我们枚举的是(i+1))。但是,好暴力啊。所以我们可以用筛法先保存1e5以内的素数,再通过质因子分解求出约数数量。
第二种方法:观察等式n=i*j+i+j,可以转化成n-i=(i+1)*j,发现暴力枚举i,判断(n-i)%(n+1)==...
分类:
其他好文 时间:
2015-07-29 01:03:37
阅读次数:
140
RGCDQTime Limit: 6000/3000 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 299Accepted Submission(s): 151Problem Descrip...
分类:
其他好文 时间:
2015-07-28 20:56:47
阅读次数:
142
由函数f的定义可以联想到:可以在筛素数(对于普通筛法,每个合数会被自己的素因子筛去一次)的过程中获得函数的值,然后可以发现2,3,5,7,11,13,17,19乘起来已经超过了100W,所以对于100W及以内的数,函数值最多为7.然后求出前缀和,对于每一个询问,统计出每个区间内函数值为1-7的数字的...
分类:
其他好文 时间:
2015-07-28 20:38:51
阅读次数:
156
筛出足够多的素数然后存起来查找即可。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 typedef long long ll; 8 const int N = 20000001; 9 const...
分类:
其他好文 时间:
2015-07-27 20:28:33
阅读次数:
150
由于区间的右端点非常大(INT_MAX),而区间长度相对小(100W),所以考虑区间筛法,左端点为1的情况需要特判一下。 1 #include 2 #include 3 #include 4 using namespace std; 5 6 typedef long long ll; 7 c...
分类:
其他好文 时间:
2015-07-27 14:31:14
阅读次数:
87
给你一个数n,请问n以内有多少个素数?(n 6 #include 7 using namespace std; 8 const int SIZE = 1e7; 9 10 int prime[SIZE]; // 第i个素数11 bool is_prime[SIZE]; ...
分类:
其他好文 时间:
2015-07-26 20:51:21
阅读次数:
301