素数的问题
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。如果输入的整数本身就是素数,则输出该素数本身,距离输出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 <iostream>
using namespace std;
/////////////////////////////
// construct the class
class number
{
public:
void set_num();
int is_prime(unsigned int);
void prime_len();
private:
unsigned int num;
unsigned int len;
};
// give the private variable 'num' a value
void number::set_num()
{
unsigned int a;
cout << "Please input a unsigned number:" ;
cin >> a;
num = a;
}
// is prime number or not ?
int number::is_prime(unsigned int sub_num)
{
int flag, i;
for (i = 2; i < sub_num; i++)
{
if (sub_num % i == 0)
break;
}
if (i == sub_num)
{
flag = 1;
}
else
flag = 0;
return flag;
}
// output the shortest position of the prime number
void number::prime_len()
{
int i = 0;
int len1, len2;
for (i = 0; ; i++)
{
if (!is_prime(num + i))
continue;
else
{
len1 = i;
break;
}
}
for (i = 0; ; i++)
{
if (!is_prime(num - i))
continue;
else
{
len2 = i;
break;
}
}
if (len1 > len2)
cout << num - len2 << " " << len2 << endl;
else if (len1 == len2)
cout << num - len1 << " " << len1 << endl;
else
cout << num + len1 << " " << len1 << endl;
}
////////////////////////////////////
// the main entry point
////////////////////////////////////
int main(int argc, char *argv[])
{
number n;
int N;
cout << "Please input N:" ;
cin >> N;
while (N--)
{
n.set_num();
n.prime_len();
}
return 0;
}