| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1192 人关注过本帖
标题:关于孪生素数,各位帮忙看一下代码本身有没有逻辑错误。
只看楼主 加入收藏
天天涯涯
Rank: 4
等 级:业余侠客
帖 子:215
专家分:267
注 册:2011-10-17
结帖率:94.74%
收藏
已结贴  问题点数:20 回复次数:15 
关于孪生素数,各位帮忙看一下代码本身有没有逻辑错误。
程序代码:
#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
i小编
Rank: 2
等 级:论坛游民
帖 子:3
专家分:12
注 册:2011-11-17
收藏
得分:2 
别的没看,首先你的judge函数返回值有问题,返回你judge函数的局部变量是得不到预期值的。
2012-02-25 11:10
天天涯涯
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
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:9 
题目网址发来

                                         
===========深入<----------------->浅出============
2012-02-25 11:35
天天涯涯
Rank: 4
等 级:业余侠客
帖 子:215
专家分:267
注 册:2011-10-17
收藏
得分:0 
http://acm.
2012-02-25 11:57
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
1000000个数先筛一下  然后遍历一次就行了  先去吃饭了  下午给你写

                                         
===========深入<----------------->浅出============
2012-02-25 12:06
天天涯涯
Rank: 4
等 级:业余侠客
帖 子:215
专家分:267
注 册:2011-10-17
收藏
得分:0 
我就是这么做的,不知道怎么回事就是过不了。
2012-02-25 12:09
yxiangyxiang
Rank: 3Rank: 3
来 自:/\/\/\/\/
等 级:论坛游侠
帖 子:130
专家分:186
注 册:2012-1-29
收藏
得分:0 
我这就找不到这数,到底孪生素数是什么说明白点
2012-02-25 15:00
天天涯涯
Rank: 4
等 级:业余侠客
帖 子:215
专家分:267
注 册:2011-10-17
收藏
得分:0 
距离为二的素数,但是这一题加了一个距离为一的素数。
2012-02-25 16:29
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:9 
距离为一的素数对只有2和3。
你的分析有点意思,但你漏了6以前的素数。2、3是素数对,3、5是素数对。

呵呵,这题很简单,就不给代码了。公布一下我的AC成绩。用时20毫秒, 代码长342字节,消耗内存3156KB。

这两天太忙了,过两天有时间我打算把你们学校的题全刷一遍。

重剑无锋,大巧不工
2012-02-25 17:23
快速回复:关于孪生素数,各位帮忙看一下代码本身有没有逻辑错误。
数据加载中...
 
   



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

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