re怠惰的未禾 2022-02-15 12:30 采纳率: 75%
浏览 40
已结题

哥德巴赫猜想,代码优化

哥德巴赫猜想,不是想证明这个结论,而是对于任给的一个不小于6的偶数,来寻找和等于该偶数的所有素数对。做好了这件实事,就能说明这个猜想是成立的。
要求程序定义一个prime()函数和一个main()函数,prime()函数判断一个整数n是否是素数,其余功能在main()函数中实现。
int prime(int n)
{
//判断n是否为素数, 若n为素数,本函数返回1,否则返回0
}
提交网站时,时间超限

#include <stdio.h>
#include <math.h>

int prime(int n);
int main(int argc, char const *argv[]){
    int m,i,j;
    scanf("%d", &m);
    
    for( i=2; i<m; i++ ){
        
        for( j=2; j<m; j++ ){
            if( prime(i)&&prime(j)){//若i和j都是素数 
                if( i+j==m&&i<=j )//判断去重 
                    printf("%d %d\n", i,j);
            }
        }
    }
    return 0;
}
int prime(int n){//判断是否是素数 
    int flag=1;
    for( int i=2; i<=sqrt(n); i++ ){
        if( n%i==0||n==1 )
            flag=0;
    }
    return flag;
}

结果正确

解决时间超限

解决方案
改用单层循环i,利用循环得出另一位j
代码如下

#include <stdio.h>
#include <math.h>

int prime(int n);
int main(int argc, char const *argv[]){
    int m,i,j;
    scanf("%d", &m);
    
    for( i=2; i<m; i++ ){
        j=m-i;
            if( prime(i)&&prime(j)){//若i和j都是素数 
                if( i<=j )//判断去重 
                    printf("%d %d\n", i,j);
        }
    }
    return 0;
}
int prime(int n){//判断是否是素数 
    int flag=1;
    for( int i=2; i<=sqrt(n); i++ ){
        if( n%i==0||n==1 )
            flag=0;
    }
    return flag;
}

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-02-15 13:29
    关注

    修改如下,供参考:

    #include <stdio.h>
    #include <math.h>
    int prime(int n);
    int main(int argc, char const* argv[]) {
        int m, i, j, t;
        scanf("%d", &m);
    
        for (i = 2, t = m / 2; i <= t; i++) {   //for (i = 2; i < m; i++) 修改
            j = m - i;
            if (prime(i) && prime(j)) {//若i和j都是素数 
                if (i <= j)//判断去重 
                    printf("%d %d\n", i, j);
            }
        }
        return 0;
    }
    int prime(int n) {//判断是否是素数  修改
        if (n <= 3)  return n > 1;
        int flag = (int)sqrt(n);
        for (int i = 2; i <= flag; i++) 
            if (n % i == 0) return 0;
        return 1;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月15日
  • 已采纳回答 2月15日
  • 修改了问题 2月15日
  • 修改了问题 2月15日
  • 展开全部

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分