| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1192 人关注过本帖
标题:关于孪生素数,各位帮忙看一下代码本身有没有逻辑错误。
取消只看楼主 加入收藏
天天涯涯
Rank: 4
等 级:业余侠客
帖 子:215
专家分:267
注 册:2011-10-17
结帖率:94.74%
收藏
已结贴  问题点数:20 回复次数:6 
关于孪生素数,各位帮忙看一下代码本身有没有逻辑错误。
程序代码:
#include <stdio.h>
#include <math.h>
int judge(int t)
{
    int i,flag=1;
    for(i=2;i<=sqrt(1.0*t);i++)
        if(t%i==0)
        {
            flag=0;
            break;
        }
    return (flag);
}
int main()
{
    int n,m,i ,co=2,a[10000],b[10000],j=0;
    for(i=6;i<1000000;i+=6)    //记录100W之前的所有孪生素数有多少对
        if(judge(i+1)&&judge(i-1))
        {
           co++;
           a[j]=co;  //记录孪生素数有所少对
           b[j]=i+1;//记录比此孪生素数大一的数,以后查找谁之前的孪生素数号好查询
           j++;
         }
    scanf("%d",&n);//有N组查询数据
    while(n--)
    {
        scanf("%d",&m);//查询0到M范围内所有的孪生素数对
        if(m>=1&&m<3)
            co=0;
        if(m>=3&&m<=4)
            co=1;
        if(m>4&&m<=6)
            co=2;
        for(i=0;i<10000;i++)//判断此数在哪两个孪生素数对之间
            if(m>=b[i]&&m<b[i+1])
            {
                co=a[i];
                break;
            }
        printf("%d\n",co);//输出0到M孪生素数对的数目
    }
    return 0;
}  
有人有可能问为什么在判断孪生素数对是每次都是加6呢,在这里解释一下,我们想一下3的倍数有什么特征。任给三个连续的自然数(0除外)必有一个是3的倍数。我们以6 7 8三个数为例来说。7的左边是3的倍数所以7的两侧不可能存在孪生素数,而8的右侧又是3的倍数,所以孪生素数一定存在在3的倍数的两侧;然而3的奇数倍的数一定是奇数,奇数的两侧一定偶数,所以3的奇数倍两侧不可能是素数,所以孪生素数一定存在在3的偶数倍的两侧。于是我就每次加6。(再加上一句距离是一的也设为孪生素数)。但是OJ提交错误,各位帮帮忙。
搜索更多相关主题的帖子: 逻辑 
2012-02-25 10:15
天天涯涯
Rank: 4
等 级:业余侠客
帖 子:215
专家分:267
注 册:2011-10-17
收藏
得分:0 
#include <stdio.h>
#include <math.h>
int judge(int n)
{
    int i,f=1;
    for(i=2;i<=sqrt(1.0*n);i++)
        if(n%i==0)
            f=0;
    return (f);
}
int main()
{
    int n,m;
    scanf("%d",&m);
    while(m--)
    {
        scanf("%d",&n);
        printf("%d\n",judge(n));
    }
}
大于1的数,你可以试一下看看judge函数的返回值是否可以预期,我试过了,如果输入的数是素数输出是1,否则输出的是0.
2012-02-25 11:28
天天涯涯
Rank: 4
等 级:业余侠客
帖 子:215
专家分:267
注 册:2011-10-17
收藏
得分:0 
http://acm.
2012-02-25 11:57
天天涯涯
Rank: 4
等 级:业余侠客
帖 子:215
专家分:267
注 册:2011-10-17
收藏
得分:0 
我就是这么做的,不知道怎么回事就是过不了。
2012-02-25 12:09
天天涯涯
Rank: 4
等 级:业余侠客
帖 子:215
专家分:267
注 册:2011-10-17
收藏
得分:0 
距离为二的素数,但是这一题加了一个距离为一的素数。
2012-02-25 16:29
天天涯涯
Rank: 4
等 级:业余侠客
帖 子:215
专家分:267
注 册:2011-10-17
收藏
得分:0 
祝你好运
2012-02-25 17:39
天天涯涯
Rank: 4
等 级:业余侠客
帖 子:215
专家分:267
注 册:2011-10-17
收藏
得分:0 
回复 10楼 beyondyf
下午又测试了一下,发现错误是
             for(i=0;i<j;i++)
             if(m>=b[i]&&m<b[i+1])
             {
                co=a[i];
                break;
             }
当数据足够大时会发现b[i+1]不存在,那么输出的就是上一次能够存在b[i+1]的数的co
2012-02-25 18:19
快速回复:关于孪生素数,各位帮忙看一下代码本身有没有逻辑错误。
数据加载中...
 
   



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

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