我一直在努力实现this quadratic sieve factoring algorithm的变体。在我的代码中,我暂时跳过筛选步骤,只是在我的代码中执行蛮力以查找199个平滑数字。无论我在一个部分中遇到什么困难,我写了this python code:
def fact(n):
primes,m,p = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199],[0 for i in range(46)],0
while True:
if (n/(int(primes[p]))) == 1:
m[p] = int(m[p])+1
break
elif (n/(int(primes[p])))%1 == 0:
m[p] = int(m[p])+1
n = (n/(int(primes[p])))
elif p == 45:
break
else:
p+=1
return m
def transpose_mod2(m):
u=[]
for q in range(len(m[0])):
u.append([])
for j in range(len(u)):
for q in range(len(m)):
u[j].append(0)
for a in range(len(m)):
for o in range(len(m[a])):
u[o][a] = m[a][o]%2
return u
def inff(n,am,ax):
g,num = [],[]
for a in range(am,ax):
ftt = fact(((a*a)-n))
if ftt != None:
num.append((a*a)-n)
g.append(ftt)
return transpose_mod2(g),num
a,b=inff(123,25,99) #(multiple of the primes, min a, max a)
print(a)
我的代码实现了构造大矩阵的算法。当试图实现该算法时,我陷入了对大矩阵的高斯消除中,这标识了另一个矩阵,这样如果我将原始的较大矩阵乘以,我将得到一个空矩阵。
所以,我想请求帮助实现高斯消除的最佳方法,对于python中的这样一个大矩阵。
PS。我是一名缺乏编程知识的高中生,所以请原谅我的错误代码。