1和0既非素数也非合数

2018/02/20 21:29
阅读数 9

素数距离问题

时间限制: 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 <bits/stdc++.h>
using namespace std;
typedef long long  ll;
const int INF = 0x3f3f3f3f;
const int moder = 10000;
const int maxn = 1100000;

int main()
{
    map<int,int>mp;
    for(int i=2;i*i < maxn;i++)
    {
        if(mp[i] == 0)
        {
            for(int j=i*2;j < maxn;j = j+i)
            {
                mp[j] = 1;
            }
        }
    }
    int t;
    cin >> t;
    while(t--)
    {
        int m;
        cin >> m;
        if(m == 1) {
            cout << "2 1" << endl;
            continue;
        }
        int flag1 = 0;
        for(int i=m;i < maxn;i++)
        {
            if(mp[i] == 0) {
                flag1 = i;
                break;
            }
        }
        int flag2 = 0;
        for(int i=m;i > 1;i--)
        {
            if(mp[i] == 0) {
                flag2 = i;
                break;
            }
        }

        if(flag1 - m < m - flag2)
        {
            cout << flag1 << " " << flag1-m << endl;
        } else{
            cout << flag2 << " " << m-flag2 << endl;
        }
    }
    return 0;
}

——本想刷刷水题放松心情,结果采坑了,记住1和0既非素数也非合数!



展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部