UVA 10140 - Prime Distance(数论)
2015-12-28 11:26
387 查看
10140 - Prime Distance
题目链接题意:求[l,r]区间内近期和最远的素数对。
思路:素数打表,打到sqrt(Max)就可以,然后利用大的表去筛素数。因为[l, r]最多100W。所以能够去遍历一遍。找出答案。
注意1的情况,一開始没推断1,结果WA了
代码:
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; #define INF 0x3f3f3f3f3f const int N = 100005; long long l, r, vis[N * 10], prime , pn = 0; int main() { for (long long i = 2; i < N; i++) { if (vis[i]) continue; prime[pn++] = i; for (long long j = i; j < N; j += i) vis[j] = 1; } while (~scanf("%lld%lld", &l, &r)) { memset(vis, 0, sizeof(vis)); for (long long i = 0; i < pn; i++) { for (long long j = (l / prime[i] + (l % prime[i] != 0)) * prime[i]; j <= r; j += prime[i]) { if (j / prime[i] != 1) vis[j - l] = 1; } } long long pre = -1; long long Max = 0, Min = INF; long long maxl, maxr, minl, minr, flag = 1; for (long long i = l; i <= r; i++) { if (vis[i - l] || i == 1) continue; if (pre != -1) { if (i - pre > Max) { Max = i - pre; maxl = pre; maxr = i; } if (i - pre < Min) { Min = i - pre; minl = pre; minr = i; } flag = 0; } pre = i; } if (flag) printf("There are no adjacent primes.\n"); else printf("%lld,%lld are closest, %lld,%lld are most distant.\n", minl, minr, maxl, maxr); } return 0; }
相关文章推荐
- android最近心得整理
- C#并行编程-并发集合
- Java深入(高新技术)(八):代理技术AOP
- Leetcode: Flip Game
- Windows 2008 Domain Controller
- WordPress 全方位优化指南(上)
- iOS UI-(多)视图控制器的生命周期、加载方法和模态视图方法以及屌丝方法
- appcache 缓存
- Android Studio Gradle Build Running 特别慢的问题
- 小马哥---高仿苹果6 R7226刷机拆机主板图与开机识别图 修改WiFi信号增强
- iOS输入框怎样避免键盘的遮挡
- 关于window.location.href的一些问题,求大神指教
- Repeater控件条纹样式
- python环境配置
- js严格模式
- UIImageView上添加Button不能响应点击事件
- Android——友盟社会化分享集成【友盟4.3版本SDK】
- java项目中引用loadrunner lrapi
- 如何设计一个优秀的API(转)
- JAVA 使用Dom4j 解析XML