素数距离问题(南阳acm)
2015-11-04 22:21
465 查看
素数距离问题
时间限制:3000 ms | 内存限制:65535 KB难度:2
描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
输入第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),输出每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。样例输入
3 6 8 10
样例输出
5 1 7 1 11 1
#include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 1000010 int table[MAX]; void buildPrimeTable()//判断是否为素数(素数打表) { table[1]=1; for(int i=2;i*i<MAX;i++) if(!table[i]) for(int j=i*i;j<MAX;j+=i) table[j]=1; } int main() { buildPrimeTable(); int n,num,numUp,numDown; scanf("%d",&n); while(n--) { scanf("%d",&num); if(table[num]==0) printf("%d 0\n",num); else { numUp=numDown=num;//numup右边的数,numdown,左边的数 while(table[numUp]!=0)//如果numup不是素数,+1 numUp++; while(table[numDown]!=0&&numDown>0) numDown--; if(numDown==0)// printf("%d %d\n",numUp,numUp-num); else if(numUp-num>=num-numDown) printf("%d %d\n",numDown,num-numDown); else printf("%d %d\n",numUp,numUp-num); } } return 0; }
相关文章推荐
- HDU 2029
- HDU 1056
- HDU 1061 ----Rightmost Digit
- 2056——Rectangles
- 2055——An easy problem
- 2053——Switch Game
- 2052——Picture
- 2051——Bitset
- 2043——密码
- 2042——不容易系列之二
- 2040——亲和数
- 2039——三角形
- 2036——改革春风吹满地
- 2035——人见人爱A^B
- 2034——人见人爱A-B
- 2031——进制转换
- 2030——汉字统计
- 2029——Palindromes _easy version
- 2028——Lowest Common Multiple Plus
- 2027——统计元音