NYOJ-24-素数距离问题

原题地址

素数距离问题

 
描述
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
输入
第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),
输出
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入
3
6
8
10

样例输出

5 1
7 1
11 1
 1 #include <iostream>
 2 #include<cmath>
 3 using namespace std;
 4 
 5 bool IsPrime(int n)
 6 {
 7     if(n<2)
 8         return false;
 9     for (int i=2; i<=sqrt(n); i++)
10     {
11         if (n%i==0)
12         {
13             return false;
14         }
15     }
16     return true;
17 }
18 
19 int main()
20 {
21     int n,m,m1,m2;
22     cin>>n;
23     while(n--)
24     {
25         cin>>m;
26         if(IsPrime(m))
27         {
28             cout<<m<<" 0"<<endl;
29             continue;
30         }
31         if(m==1)
32         {
33             cout<<"2 1"<<endl;
34             continue;
35         }
36         m1=m2=m;
37         while(m1--)
38         {
39             if(IsPrime(m1))
40                 break;
41         }
42         while(m2++)
43         {
44             if(IsPrime(m2))
45                 break;
46         }
47         if((m-m1)<=(m2-m))
48             cout<<m1<<" "<<m-m1<<endl;
49         else
50             cout<<m2<<" "<<m2-m<<endl;
51     }
52     return 0;
53 }
原文地址:https://www.cnblogs.com/qq1353842241/p/8001045.html