- 主题:如何加快运算速度?请指教
我有1029个不相同的素数,然后 要从中取出若干个素数(无重复),把它们乘起来构成一个大整数 N, 要求N的每一个素因子 p 都满足条件
p-1 整除 N-1,且 p+1 整除 N+1
(只要计算奇数个素因子的乘积,再验算就行了)
我写python代码,初步验算了一下 取三个素数,算乘积,再验算的情况,有181,062,154种(1029中取3的组合数)。可是太慢了,10分钟还没计算完。
后面还有取5个,7个,9个,。。。。。。1025个素数算乘积的情况。这何时是个头啊?大佬,有加速的方法吗?
※ 修改:·feng321 于 Mar 16 12:16:24 2023 修改本文·[FROM: 120.242.253.*]
※ 来源:·水木社区
http://www.mysmth.net·[FROM: 120.242.253.*]
修改:feng321 FROM 120.242.253.*
FROM 120.242.253.*
半个小时,跑完了3个素数相乘的情况。如果用gpu,有加速的可能吗?
【 在 feng321 的大作中提到: 】
: 我有1029个不相同的素数,然后 要从中取出若干个素数(无重复),把它们乘起来构成一个大整数 N, 要求N的每一个素因子 p 都满足条件
: p-1 整除 N-1,且 p+1 整除 N+1
: (只要计算奇数个素因子的乘积,再验算就行了)
: ...................
--
FROM 120.242.253.*
谢谢,1029个素数,是固定的集合。但是p是不固定的。比如5个素数的乘积是N,那么p有可能取这5个当中的一个。
【 在 ip5 的大作中提到: 】
: 你的这个素数有多少位?是固定的集合还是变的? 大数乘法是怎么算的?感觉光算这个乘积都有优化空间
: 另外是不是可以先做一些简单的验证 乘积pai先保留10000以下的部分
: p-1 p+1 有很多数字是可以根据后面的几位验证的
: ...................
--
FROM 120.242.253.*
1087*1087*1087 = 1,284,365,503
1,284,365,503 / 1087 = 1,181,569
1,284,365,502 / 1086 = 1,182,657
1,284,365,504 /10 88 == 1,180,483
1087 也是我这个素数表里面的一个素数。只是三个重复了,不合要求
【 在 iMx 的大作中提到: 】
: 这个数学上有解吗
: p是n的因子
: p-1是n-1的因子
: ...................
--
FROM 120.242.253.*
你这什么意思?不懂啊。n=p1*p2*p3*p4*p5, 大佬,有快速计算两个大数乘积、取模的库吗?numpy能计算两个大数的乘积吗?怎么计算?
【 在 iMx 的大作中提到: 】
: p-1 与n-1 可以填其他因素
: p+1 与n+1,没得填了吧
:
--
FROM 120.242.253.*
能解释一下,为何这样的就少算些吗?真是不太明白
【 在 WanderLife 的大作中提到: 】
: 你另外帖子里面的代码:
: 可以改成下面这样,能少算几次:
: flag = False
: ...................
--
FROM 120.242.253.*
比如,如果我找到了这样一个list,里面所有元素乘积 等于a。然后里面有一个元素b(比如b=2647),满足 b 整除a,而且 b-1 整除 a-1,b+1 整除a+1.但是就只有这一个元素满足,其他元素都不满足。我如何通过逼近(迭代、换元素)的方法,再找到另一个元素c满足这三个关系式?谢谢
list = [[1087, 1759, 1999, 2647, 2719, 3319, 3607, 4219, 5839, 6163, 7879, 9007, 9343, 12799, 13183, 15583, 16759, 20359, 30727, 50383, 65599, 74719, 77263, 78823, 80239, 90403, 100279, 109663, 130807, 154087, 208279,。。。。。。。]
【 在 iMx 的大作中提到: 】
: 这个数学上有解吗
: p是n的因子
: p-1是n-1的因子
: ...................
--
FROM 120.242.253.*
不是这样的
【 在 iMx 的大作中提到: 】
: n=p1×p2×p3×p4×p5
: n+1=(p1+1)×(p2+1)×(p3+1)×(p4+1)×(p5+1)×k
:
--
FROM 120.242.193.*
谢谢回复,我们可以假设这个素数列表是递增不重复的。这样程序就可以不考虑重复的情况了。
“判断规则加上p-1整除N-1则在x,y,z不相同不能成立(找不大)”————这句话什么意思?满足p|N,(p-1)|(N-1),(p+1)|(N+1) 的素数,找不到?不可能的!我已经找到一个了,并且发给了iMx
好奇,您是怎么用gpu运算的啊?代码看不出你是用gpu运算啊
【 在 poggy 的大作中提到: 】
: 三个素数很快(范围1000到9000的素数),1s 结果没有去重, 判断规则加上p-1整除N-1则在x,y,z不相同不能成立(找不大)
: if(x!=y and y!=z and x!=z): #把它们乘起来构成一个大整数 N, 要求N的每一个素因子 p 都满足条件
: N = x*y*z #p-1 整除 N-1,且 p+1 整除 N+1
: ...................
--
FROM 120.242.193.*
素数是固定集合。大数乘法 在python 里直接相乘,python自动处理了。感觉算乘积、再判断是否整除,都不耗时间,关键是3重、5重循环耗时间。
【 在 ip5 的大作中提到: 】
: 你的这个素数有多少位?是固定的集合还是变的? 大数乘法是怎么算的?感觉光算这个乘积都有优化空间
: 另外是不是可以先做一些简单的验证 乘积pai先保留10000以下的部分
: p-1 p+1 有很多数字是可以根据后面的几位验证的
: ...................
--
FROM 120.242.193.*