完美世界2017秋招真题 【编程题】孪生质数(C++)

题目地址:http://exercise.acmcoder.com/ques_report?paperId=222


题目:

数学中有很多奇特的现象,孪生质数就是一种(孪生素数就是指相差2的质数对,例如3和5,5和7,11和13…),现在要求输出所有在m和n范围内的孪生质数。

输入

输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)

输出

对于每个测试实例,要求输出所有在给定范围内孪生质数,就是说,输出的孪生质数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开 ; 如果给定的范围内不存在孪生指数,则输出 “no” ; 每个测试实例的输出占一行。

样例输入

100 150

样例输出

101 103 107 109 137 139


思路:没什么可说的,平方根法判断素数

这道题最坑的就是容易出现格式错误,注意每组输出的数据的最后一个值后面不要跟着空格,否则系统会判断为( Presentation Error)PE
#include "iostream"
#include "math.h"
using namespace std;
/*质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数。*/
bool isPrime(int num)
{
    if(num == 2)
        return true;
    int tmp = sqrt(num);
    for(int i=2;i<=tmp;i++)
    {
        if(num%i == 0)
        {
            return false;
        }
    }
    return true;
}
int main()
{
    int m,n;
    while(cin>>m>>n)
    {
        int index = m;
        bool flag = false;
        while (index <= n - 2) {
            if (isPrime(index)) {
                if (isPrime(index + 2)) {
                    if(flag)
                        cout<<" ";
                    flag = true;
                    cout << index << " " << index + 2;
                    index += 3;
                } else {
                    index++;
                }
            } else {
                index++;
            }
        }
        if (!flag)
            cout << "no";
        cout<





你可能感兴趣的:(笔试面试)