Hdu 3823 Prime Friend
来源:互联网 发布:mac finder 路径 编辑:程序博客网 时间:2024/05/16 01:28
素数筛选 特判
题意:给出两个数字a,b。使a+x, b+x都是素数,并且它们之间没有素数。求出这样的最小的x。
分析:由于无论a,b与什么数相加之间的差值都相等,所以实际上求的是大于b的与其前一个数的差值是a-b的素数。所以该题的关键是将20000000之前的素数打表,然后求其每个之间的差值,相等的存放到同一个数组中。
AC代码:
#include<iostream>#include<vector>#include<stdio.h>#include<string.h>using namespace std;const int MAXN = 200000010;int a[MAXN];bool b[MAXN];vector <int>sub[155];int main(){ memset(b, 0, sizeof(b)); b[1] = 1; for(int i = 2; i*i <= MAXN; i++){ if(b[i] == 1) continue; for(int j = i*2; j <= MAXN; j += i){ b[j] = 1; } } int times = 0; for(int i = 2; i <= MAXN; i++){ if(b[i] == 0){ a[times] = i; times++; } } for(int i = 0; i < times-1; i++){ int temp = a[i+1] - a[i]; if(temp>150) continue; sub[temp].push_back(a[i+1]); } int m; scanf("%d", &m); int sum = 0; while(m--){ sum++; long long x, y; cin >> x >> y; int temp1 = abs(x - y); int temp2 = x > y ? x : y; long long res = 0; for(int i = 0;i < sub[temp1].size(); i++){ if(sub[temp1][i] >= temp2){ res = sub[temp1][i]; break; } } printf("Case %d: ", sum); if(res == 0) puts("-1"); else printf("%lld\n", res - temp2); } return 0;}
- Hdu 3823 Prime Friend
- HDU 3823 Prime Friend
- HDU-3823-Prime Friend
- HDU 3823 Prime Friend
- HDU 3823 Prime Friend 线性筛选素数
- hdu 4460 Friend Chains
- hdu 4460 Friend Chains
- hdu 1719 Friend
- hdu(1719)Friend
- HDU 4460 Friend Chains
- HDU 4460 Friend Chains
- friend(hdu 1719)
- hdu 1781 Friend
- hdu-1719 Friend
- hdu-4460 Friend Chains
- hdu---1719Friend
- HDU 1719--Friend【数学】
- HDU 1719 Friend 【数学题】
- 10个迷惑新手的Cocoa,Objective-c开发难点和问题
- HttpURLConnection 与 Socket
- ssh初步整合实现邮件的发送和上传文件的功能
- 巧用DBGrid控件的Sort属性实现“点击标题栏自动排序功能
- CCScene,CCLayer,CCSprite的默认坐标和默认锚点
- Hdu 3823 Prime Friend
- iOS 4 多任务和后台运行原理图
- Poi 解析
- 7.iOS 视频播放2MPMoviePlayerViewController
- Java的变量
- RS-485自收发电路的参考设计
- 10个重要的算法C语言实现源代码
- mybatis实战教程(mybatis in action),mybatis入门到精通
- 求树的重心