繁体   English   中英

我有一个我无法弄清楚的 numpy 索引错误?

[英]I havea numpy indexing bug that i can't figure out?

在 out 语句之前的第二行中,答案是 -1,由于我的打印,所以应该是答案:618970019642690137449562111,即 2**89-1,而不是我得到 -1

我一生都无法弄清楚错误是什么,有人可以启发我吗? 为什么我在那里得到 -1 而不是 618970019642690137449562111

这是代码,“-1”的错误是“[Out 778:]”语句之前的两行(您必须向右滚动才能看到它)。 它应该继续攀爬 2 树负 1 的幂,但它给出的答案是 -1,这是不正确的:

import numpy as np
import gmpy2

mersenne=np.array([3, 5, 7, 13, 17, 19, 31, 61,  
         89, 107, 127, 521, 607, 1279, 2203, 
         2281, 3217, 4253, 4423, 9689, 9941, 
         11213, 19937, 21701, 23209, 44497, 86243, 
         110503, 132049, 216091, 756839, 859433,  
         1257787, 1398269, 2976221, 3021377, 6972593, 
         13466917, 20996011, 24036583, 25964951, 30402457, 
         32582657, 37156667, 42156667, 42643801,         
         43112609, 57885161, 74207281, 77232917, 82589933])

def XploderMODex(s):   
 s=gmpy2.mpz(s)    
 ss=gmpy2.mpz(2**s-1)   
 perfect=True     
 count=gmpy2.mpz(0)
 for x in mersenne[mersenne<s]: 
    print(ss, x, 2**x-1)
    if ss%(2**x-1) == 0: 
        print(ss%(2**x-1), ss, x, mersenne[count])
        return False,count
    count+=1 
 return True,count
 
In [778]: XploderMODex(1009) 
5486124068793688683255936251187209270074392635932332070112001988456197381759672947165175699536362793613284725337872111744958183862744647903224103718245670299614498700710006264535590197791934024641512541262359795191593953928908168990292758500391456212260452596575509589842140073806143686060649302051520511 3 7
5486124068793688683255936251187209270074392635932332070112001988456197381759672947165175699536362793613284725337872111744958183862744647903224103718245670299614498700710006264535590197791934024641512541262359795191593953928908168990292758500391456212260452596575509589842140073806143686060649302051520511 5 31
5486124068793688683255936251187209270074392635932332070112001988456197381759672947165175699536362793613284725337872111744958183862744647903224103718245670299614498700710006264535590197791934024641512541262359795191593953928908168990292758500391456212260452596575509589842140073806143686060649302051520511 7 127
5486124068793688683255936251187209270074392635932332070112001988456197381759672947165175699536362793613284725337872111744958183862744647903224103718245670299614498700710006264535590197791934024641512541262359795191593953928908168990292758500391456212260452596575509589842140073806143686060649302051520511 13 8191
5486124068793688683255936251187209270074392635932332070112001988456197381759672947165175699536362793613284725337872111744958183862744647903224103718245670299614498700710006264535590197791934024641512541262359795191593953928908168990292758500391456212260452596575509589842140073806143686060649302051520511 17 131071
5486124068793688683255936251187209270074392635932332070112001988456197381759672947165175699536362793613284725337872111744958183862744647903224103718245670299614498700710006264535590197791934024641512541262359795191593953928908168990292758500391456212260452596575509589842140073806143686060649302051520511 19 524287
5486124068793688683255936251187209270074392635932332070112001988456197381759672947165175699536362793613284725337872111744958183862744647903224103718245670299614498700710006264535590197791934024641512541262359795191593953928908168990292758500391456212260452596575509589842140073806143686060649302051520511 31 2147483647
5486124068793688683255936251187209270074392635932332070112001988456197381759672947165175699536362793613284725337872111744958183862744647903224103718245670299614498700710006264535590197791934024641512541262359795191593953928908168990292758500391456212260452596575509589842140073806143686060649302051520511 61 2305843009213693951
5486124068793688683255936251187209270074392635932332070112001988456197381759672947165175699536362793613284725337872111744958183862744647903224103718245670299614498700710006264535590197791934024641512541262359795191593953928908168990292758500391456212260452596575509589842140073806143686060649302051520511 89 -1
0 5486124068793688683255936251187209270074392635932332070112001988456197381759672947165175699536362793613284725337872111744958183862744647903224103718245670299614498700710006264535590197791934024641512541262359795191593953928908168990292758500391456212260452596575509589842140073806143686060649302051520511 89 89
Out[778]: (False, mpz(8))

这是一个更简单的示例,当我到达 mersenne 89 时也是如此:

In [780]: XploderMODex(101)                                                                                                                                        
2535301200456458802993406410751 3 7
2535301200456458802993406410751 5 31
2535301200456458802993406410751 7 127
2535301200456458802993406410751 13 8191
2535301200456458802993406410751 17 131071
2535301200456458802993406410751 19 524287
2535301200456458802993406410751 31 2147483647
2535301200456458802993406410751 61 2305843009213693951
2535301200456458802993406410751 89 -1
0 2535301200456458802993406410751 89 89

这是一个溢出错误。 您可以使用不会溢出的python int 您可以将dtype添加到您的mersenne数组中来解决它:

mersenne=np.array([3, 5, 7, 13, 17, 19, 31, 61,  
         89, 107, 127, 521, 607, 1279, 2203, 
         2281, 3217, 4253, 4423, 9689, 9941, 
         11213, 19937, 21701, 23209, 44497, 86243, 
         110503, 132049, 216091, 756839, 859433,  
         1257787, 1398269, 2976221, 3021377, 6972593, 
         13466917, 20996011, 24036583, 25964951, 30402457, 
         32582657, 37156667, 42156667, 42643801,         
         43112609, 57885161, 74207281, 77232917, 82589933], dtype='O')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM