鱼C论坛

 找回密码
 立即注册
查看: 3786|回复: 10

验证“哥德巴赫猜想”

[复制链接]
发表于 2020-2-17 16:15:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
那位老哥看看哪里有错误,测试不完全通过,还超时,希望大佬能优化一下
数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。
输入格式:
输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N。
输出格式:
在一行中按照格式“N = p + q”输出N的素数分解,其中p ≤ q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。
输入样例:24         
输出样例:24 = 5 + 19
  1. #判断素数函数
  2. def prime(p):
  3.     flag = 0
  4.     if p == 2:
  5.         return True
  6.     else:
  7.         for i in range(2,p):
  8.             if p%i==0:
  9.                 flag = 0
  10.                 break
  11.             else:
  12.                 flag = 1
  13.                
  14.         if flag:
  15.             return True
  16.         else:
  17.             return False
  18. a = int(input())
  19. d=[]
  20. for i in range(1,a+1):
  21.     if prime(i):
  22.         d.append(i)
  23. sum1 = 0
  24. flag = 0
  25. length = len(d)
  26. for i in d:
  27.     for j in range(i,length):
  28.         if i+d[j]==a:
  29.             print("{} = {} + {}".format(a,i,d[j]))
  30.             flag = 1
  31.             break
  32.     if flag==1:
  33.         break     
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-17 16:39:46 | 显示全部楼层
哈哈,你可以叫zlzlt做成一道题了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-17 16:58:47 | 显示全部楼层
fan1993423 发表于 2020-2-17 16:39
哈哈,你可以叫zlzlt做成一道题了

。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-17 17:03:56 | 显示全部楼层
可以判断 x  和 24-x 同时是素数即可
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-17 17:35:29 | 显示全部楼层

20亿确实太大了,python运行不起来,我觉得20万以内还勉勉强强
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-17 19:15:06 | 显示全部楼层
优秀
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2020-2-17 21:18:41 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-17 22:57:49 | 显示全部楼层
转换下思想,具体没有实现过,题目会根据给定的N求 素数范围,而且,还是求最小的解,意味这有一个最大解。

所以只要找到一个 N`的素数(比N小的最大素数),再尝试另外一个素数的解。

建议用米勒-罗宾算法,不要用线筛,或者打表,更加别去强算。


米勒-罗宾算法可以快判2^63大小的数字
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-17 23:02:44 | 显示全部楼层
Stubborn 发表于 2020-2-17 22:57
转换下思想,具体没有实现过,题目会根据给定的N求 素数范围,而且,还是求最小的解,意味这有一个最大解。 ...

可以的,get一个新算法,我 马上看一下这个算法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-18 22:45:02 | 显示全部楼层
fan1993423 发表于 2020-2-17 23:02
可以的,get一个新算法,我 马上看一下这个算法

实现了吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-18 23:12:41 | 显示全部楼层

没有哦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-22 13:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表