bzoj3798: 特殊的质数】的更多相关文章

分块打表.块内的暴力块外的打表.开始没有j>0所以WA了. #include<cstdio> #include<cmath> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define REP(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=…
块大小为10^5. #include<cstdio> using namespace std; const int table[] = {0, 4784, 8978, 12981, 16901, 20732, 24523, 28249, 31916, 35585, 39176, 42818, 46430, 49962, 53516, 57023, 60523, 64040, 67489, 70985, 74417, 77879, 81285, 84679, 88055, 91433, 9487…
题意 题目链接 Sol 分块打表,非常好的思想. 对于这种求$[A, B]$区间内xxx的数的个数,然后$B$又不算是特别大的题,考虑分段打表 每个块的大小为$10^5$,打$3 * 10^3$个.然后块内的暴力查,块外的暴力算 /* */ #include<cstdio> #include<cstdlib> #include<ctime> const int N = 3e8; , base = 1e5; void check(int x) { ; i * i <…
[BZOJ3798]特殊的质数 Description 求[A,B]之间的质数个数,并且满足X=Q^2+P^2,P,Q是正整数. Input 第一行输入A,B Output 输出有多少组P,Q满足条件 Sample Input 6 66 Sample Output 7 HINT 1<=A<=B<=3*10^8 题解:还有什么比表打错了更让人欲哭无泪的~ 注意一下几点: 1.分块不能太小,10^5很稳,再小有可能装不下了 2.2=1*1+1*1,也算~ 3.不要把x=i*i+0*0这样的算…
2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4436  Solved: 1957[Submit][Status][Discuss] Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 1<=N<=10^7 uva上做过gcd(x,y)=1的题 gcd(x,y)=p ---> gcd(x/p,y/p)=1 每个质数做一遍行了 答案是欧拉函数的前缀和*2…
Description: Count the number of prime numbers less than a non-negative number, n click to show more hints. References: How Many Primes Are There? Sieve of Eratosthenes Credits:Special thanks to @mithmatt for adding this problem and creating all test…
以为所有N的除数都是以根号N为轴对称的. 例如16的开方为4: 16%1 == 0 则1 与 16 都是16的除数. 16%2 == 0 则2 与 8 都是16的除数. 16%4 ==0 则4 为16 的除数. 如果继续查找,找到 8 则已经添加. 所以判断一个数为质数与否的复杂度为O(根号N)…
今天面试,遇到面试官询求最大公约数.小学就学过的奥数题,居然忘了!只好回答分解质因数再求解! 回来果断复习下,常用方法辗转相除法和更相减损法,小学奥数都学过,很简单,就不细说了,忘了的话可以百度:http://baike.baidu.com/link?url=Ba106RbHkMjZm3rolmCHEEFt3eDkVbngcReykcqt4Wv0dbTI_0ZmTDE5b0X-xWFx 以下是代码实现,这两种方法,还有常规的分解因式,顺便比较了一下效率,其中分解因式用了两种方法来求取小于该数字的…
最近求职时的其中一道面试题: 求100之内的质数 <? //求100以内质数 for ($i = 1; $i <= 100; $i++) { $k = 0; for ($j = 1; $j < $i; $j++) { if ($i % $j == 0) { $k++; } } if ($k == 1) { echo $i; echo "  "; } } ?>…
#!bin/bash a= $) ;do n= $x);do ];then n=$[$n+] fi done ];then { echo -n -e "$x\t" sum=$[$sum+$x] a=$[$a+] } ];then { echo a= } fi done echo echo "1到$1之间的质数之和为:$sum" 变量: sum 累加质数的和 a 格式打印控制 n 判断是否为质数 2 则为质数…