UVa 1644 (筛素数 + 二分) Prime Gap】的更多相关文章

题意: 给出一个整数n,如果n是素数输出0,否则输出它后一个素数与前一个素数的差值. 分析: 首先用筛法把前十万个素数都筛出来,然后放到数组里.用二分找到不大于n的最大的素数的下标,如果这个素数等于n,则直接输出0,否则输出它后一个素数与它本身的差值. #include <cstdio> #include <cmath> ; ; ]; ], cnt = ; void Init() { int m = sqrt(maxn + 0.5); ; i <= m; ++i) if(!v…
Prime Gap 这里直接写中文了 Descriptions: 对于一个数n,若n为素数则输出0,否则找到距离n最小的两个素数,一个大于n,一个小于n,输出他们的差(正数) Input 多组输入 每行包含一个数n 若n为0,程序结束 Output 对于每个测试数据,输出一个答案占一行 Sample Input 10 11 27 2 492170 0 Sample Output 4 0 6 0 114 题目链接: https://vjudge.net/problem/UVA-1644 水题,先求…
题意:给3个数M,A,B,求两个质数P,Q.使其满足P*Q<=M且A/B<=P/Q<=1,并使P*Q最大.输入若干行以0,0,0结尾. 解法:先线性筛出素数表,再枚举出P,二分出对应的最大的Q,得出最佳答案. 注意--1.第二个的代码是标准的欧拉筛,可求每个数的最小质因数:  2. 像第一个代码二分时通过位运算,使pri[]的下标尽量大来实现,比一般的二分快了很多很多!!一个6ms,一个502ms.具体请见代码. 1 #include<cstdio> 2 #include&l…
题意: 求正整数L和U之间有多少个整数x满足形如x=pk 这种形式,其中p为素数,k>1 分析: 首先筛出1e6内的素数,枚举每个素数求出1e12内所有满足条件的数,然后排序. 对于L和U,二分查找出小于U和L的最大数的下标,作差即可得到答案. #include <cstdio> #include <cmath> #include <algorithm> typedef long long LL; ; ; ]; ; LL a[maxn], cnt = ; void…
素数筛没什么好说的 #include<cstdio> #include<vector> #include<cstring> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace std; const int MAXN = 2123456; bool is_prime[MAXN]; vector<int> prime; void init() { memset(is_pri…
Prime Distance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13961   Accepted: 3725 Description The branch of mathematics called number theory is about properties of numbers. One of the areas that has captured the interest of number th…
[题意简述]:输入一个数,假设这个数是素数就输出0,假设不是素数就输出离它近期的两个素数的差值,叫做Prime Gap. [分析]:这题过得非常险.由于我是打的素数表. 由于最大的素数是1299709,所以注意在打表时要使用long long.否则程序应该不能执行.注意这一点应该就能够了. 积累! // 2984K 235Ms #include<iostream> using namespace std; #define N 2000001 bool isprime[N]; long long…
最近改自己的错误代码改到要上天,心累. 这是迄今为止写的最心累的博客. Prime Distance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18707   Accepted: 4998 Description The branch of mathematics called number theory is about properties of numbers. One of the areas that ha…
POJ 3518 Prime Gap(素数) id=3518">http://poj.org/problem? id=3518 题意: 给你一个数.假设该数是素数就输出0. 否则输出比这个数大的素数与比这个数小的素数的差值. 分析: 明显本题先要用筛选法求出130W(个素数)以内的全部素数. 然后推断给的数是否是素数就可以. 假设不是素数.那么就找出它在素数素组内的上界和下界,输出两个素数的差值就可以. 筛选法求素数可见: http://blog.csdn.net/u013480600/a…
http://poj.org/problem?id=2689 题意:给出一个大区间[L,U],分别求出该区间内连续的相差最小和相差最大的素数对. 由于L<U<=2147483647,直接筛素数是不行的,数组就开不了.可是能够依据素数筛的原理.我们先筛出sqrt(2147483647)以内的素数,然后拿这些素数去筛[L,U]之间的素数,即两次素数筛.可是L,U还是非常大,但U-L<=1000000,所以进行区间平移,将[L,U]平移为[0,U-L],就能用数组放得下. #include &…