lightoj1259 【素数预处理】】的更多相关文章

题意: 输出有多少对满足条件的(a,b) both a and b are prime; a+b=n a<=b; 思路: 一开始想的就是打表一个素数数组,然后还去二分..mdzz..直接判断一下n-A[I]是不是素数和是不是>=A[I]就好了. 都能标记何必二分-= =.我比较蠢.. 然后是内存爆了.. 后来标记的需要开bool,而且那个记录素数的数组最好开小: 以后int a[1e7]要么就不开,要么就开bool类型...谨慎.. PS:亲测,int a[1e7]爆内存,32778kb= =…
//这个很好了...虽然是一般.. int isp[1000100]; int p[1000100]; void init() { int sum=0; int i,j; fill(isp,isp+1000007,true); for(i=2;i<=1000000;i++) { sum++; if(!isp[i]) continue; for(j=i+i;j<=1000000;j+=i) { sum++; isp[j]=false; } } int num=0; for(i=2;i<=1…
Codeforces 385C Bear and Prime Numbers 其实不是多值得记录的一道题,通过快速打素数表,再做前缀和的预处理,使查询的复杂度变为O(1). 但是,我在统计数组中元素出现个数时使用了map,以至于后面做前缀和的累加时,每次都要对map进行查询,以至于TLE.而自己一直没有发现,以为是欧拉筛对于这道题还不够优,于是上网搜题解,发现别人的做法几乎一样,但是却能跑过,挣扎了许久才想起是map的原因.map的内部实现是一颗红黑树,每次查询的复杂度为O(logN),在本来时…
遇到了一个题: Description: Goldbach's conjecture is one of the oldest and best-known unsolved problems in number theory and all of mathematics. It states: Every even integer greater than 2 can be expressed as the sum of two primes. The actual verification…
[题解]CF264B Good Sequences 具有很明显的无后效性. 考虑\(dp\). 考虑初始条件,显然是\(dp(0)=0\) 考虑转移,显然是\(dp(t)=max(dp[k])+1\)其中\(gcd(data[t],data[k])>1\) 这样的转移是\(O(n^2)\)的!显然超时. 发现值域\(\le 100000\)那么我们将数拆成它的质因数. 线性筛素数预处理\([1,100000]\)的质数\(O(n)\)的代价.存下来. 然后转移的时候,先直接\(O(\sqrt{n…
以下题目标题就是此题题目链接,题目内容为了节省篇幅就不粘上去了.整套题的链接:https://acm.bnu.edu.cn/v3/contest_show.php?cid=8679#info 密码:7116 A. 进制转换 题意很明显,就不过多说明了. 此题需要注意的是n为32位整数,即int型,最好特判一下n为0的情况:还有如果n为负数,要提前输出一个负号.最后输出的时候逆着输出来,可以手动模拟一下二进制的转化过程. #include <map> #include <set> #…
简要题意及解析 1001 求\(a+b\). 数据范围很大,用int或者long long不行.Java和python可以使用大数直接写. 高精度加法:做法就是将数据读入字符串中,数组的每一个单元存一位数,像列竖式一样用循环模拟计算就好辣. 需要注意只有两组数据输出之间需要空行,最后不要多输出一个换行. 时间复杂度\(O(Tn)\) \(T\)为数据组数,\(n\)为数字位数. 1002 求两个数字之间的完数数量.注意两个端点不一定按照升序给出. 首先解决如何判断一个数是不是完数,只需要找到它的…
目录 1. 组合数取模 1. \(n,m\le 200\),\(p\) 任意 2. \(n,m\le 10^6\),\(p\ge 10^9\) 素数 3. \(n,m\le 10^6\),\(p\le 2000\) 素数 4. \(n,m\le 10^6\),\(p=p_1p_2\cdots p_k\),\(p_1,p_2,\cdots,p_k\le 2000\) 为互不相同的素数 2. 抽屉原理,容斥原理 1. 抽屉原理 2. 容斥原理 小题 1. 组合数问题 2. 组合数问题 3. 组合数问…
题目链接:https://cn.vjudge.net/problem/LightOJ-1259 题意 给一个整数n,问有多少对素数a和b,使得a+b=n 思路 素数筛 埃氏筛O(nloglogn),这个完全够用,当n=3.5e7时将近一秒(1e8次操作) 欧拉筛O(n) 考虑数论专题过完了就写个模版专题 提交过程 AC 代码 #include <cstdio> #include <cstring> using namespace std; const int maxn=1e7+20…
题意: 给出a.b区间,判断区间内素数所占百分比 思路: 注意提前打表和控制精度1e-8的范围足够用了 细节: 精度的处理 判断素数的方法(且返回值为bool) 数据类型的强制转换 保存素数个数 提前进行打表和保存区间素数个数,每次给出a.b直接输出答案就行. #include<stdio.h> #include<string.h> #include<iostream> using namespace std; //const int N=40*40+40+41; ;…