| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1237 人关注过本帖
标题:素数的距离问题
取消只看楼主 加入收藏
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
结帖率:95.37%
收藏
已结贴  问题点数:20 回复次数:5 
素数的距离问题
素数距离问题
时间限制: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 <iostream>
#include <cmath>
using namespace std;

bool is_Primer(int x)
{
    if(x<2)
        return false;
    for(int i=2;i<=sqrt(x);++i)
        if(x%i==0)
            return false;

    return true;
}

int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int x;
        cin>>x;
        if(x==1)
        {
            cout<<"2"<<" "<<"1"<<endl;
            continue;
        }
        if(x==0)
        {
            cout<<"2"<<" "<<"2"<<endl;
            continue;
        }
        if(is_Primer(x))
        {
            cout<<x<<" "<<"0"<<endl;
            continue;
        }
        
        int left;
        for(int i=x-1;i>1;--i)
            if(is_Primer(i))
            {
                left=i;
                break;
            }
            
        int right;
        for(int i=x+1;i<1000000;++i)
            if(is_Primer(i))
            {
                right=i;
                break;
            }
        
        if(right-x<x-left)
            cout<<right<<" "<<right-x<<endl;
        else if(right-x>=x-left)
            cout<<left<<" "<<x-left<<endl;
    }
    return 0;
}

这一题测试结果都对,答案总是wronganswer、。。
搜索更多相关主题的帖子: 素数 距离 输出 int cout 
2018-04-25 12:48
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 2楼 wmf2014
我也是 你能看下我的代码哪里出问题了吗?
2018-04-25 17:25
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
    for(i=3;i*i<=n&&n%i;i+=2);
    return i*i>n;

你这是什么意思?我刚测试了一下,只要是素数返回值都是1,能解释一下吗??没看懂。。return i*i>n;
2018-04-25 17:48
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 6楼 wmf2014
嗯好的谢谢、
2018-04-25 21:08
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 5楼 wmf2014
我刚试了下把for(int i=x+1;i<1000000;++i)改成for(int i=x+1;;++i)就可以啦,for(int i=x-1;i>1;--i)不用动。

[此贴子已经被作者于2018-4-25 21:23编辑过]

2018-04-25 21:09
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 9楼 wmf2014
我怎么感觉是1000001
2018-04-26 09:55
快速回复:素数的距离问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014660 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved