hej próbuje ogarnąć działanie sita i przepisałem je dokładnie jeden do jednego z książki ale z jakiegoś powoodu mimo że się kompiluje nie wyświetla się żaden wynik przykłady liczb biore takze z ksiazki wiec nie ma opcji ze sito nie policzyło problemu lub coś takiego wiec nie wiem czy to wina nowej wersji pythona czy jaka jest przyczyna ale może ktoś będzie mógł pomóc
n = 1042387
import math
#n=100451
A=500
x0=isqrt(n)
x1=range(x0+1,x0+A+1)
pocz=x1[0]
kon=x1[-1]
x00=[0 for k in x1]
P=50
pr=[r for r in prime_range(2,P) if kronecker_symbol(n,r)==1]
kk=len(pr)
x2=matrix(ZZ,A,kk)
xxx=[x^2-n for x in x1]
bety=[]
pierw=[]
for pn in range(kk):
beta=0
zawiera=True
while zawiera:
beta=beta+1
rr0=Mod(n,pr[pn]^beta).sqrt(all=True)
rr=[Integer(x) for x in rr0]
indpocz=pocz//(pr[pn]^beta)
indpocz1=indpocz+1
poczatek=indpocz*(pr[pn])^beta
poczatek1=indpocz1*(pr[pn])^beta
r0=poczatek+Integer(min(rr))
r1=poczatek+Integer(max(rr))
r2=poczatek+Integer(min(rr))
r3=poczatek+Integer(max(rr))
zawiera0=(pocz<=r0 and r0<=kon)
zawiera1=(pocz<=r1 and r1<=kon)
zawiera2=(pocz<=r2 and r2<=kon)
zawiera3=(pocz<=r3 and r3<=kon)
if zawiera0:
pierw.append([pr[pn],beta,r0])
for m in range (r0,kon+1,pr[pn]^beta):
x2[m-pocz,pn]=beta
xxx[m-pocz]=xxx[m-pocz]/pr[pn]
elif zawiera2:
pierw.append([pr[pn],beta,r2])
for m in range(r22,kon+1,pr[pn]^beta):
x2[m-pocz,pn]=beta
xxx[m-pocz]=xxx[m-pocz]/pr[pn]
if zawiera1:
pierw.append([pr[pn],beta,r1])
for m in range(r1,kon+1,pr[pn]^beta):
x2[m-pocz,pn]=beta
xxx[m-pocz]=xxx[m-pocz]/pr[pn]
elif zawiera3:
pierw.append([pr[pn],beta,r3])
for m in range(r3,kon+1,pr[pn]^beta):
x2[m-pocz,pn]=beta
xxx[m-pocz]=xxx[m-pocz]/pr[pn]
zawiera=zawiera0 or zawiera1 or zawiera2 or zawiera3
bety.append([pr[pn],beta-1])
if x1[0]%2==0:
xp=1
else:
xp=0
for k in range (xp,A,2):
x00[k]=1
xxx[k]=xxx[k]/2
a0=matrix(ZZ,[x00]).transpose()
aa = a0.augment(x2)
pr.insert(0,2)
mat1=matrix(Integers(2), [aa[k] for k in range(A) if xxx[k]==1])
lx1=mat1.nrows()
kkk=kernel(mat1)
nk=kkk.ngens()
for l in range(nk):
czynn=[x1[k] for k in range(lx1) if (kkk.gen(l)) [k]>0]
x=prod(czynn)%n
y=Integer(mod(x^2,n).sqrt())
g1=gcd(x+y,n)
g2=gcd(x-y,n)
if min(g1,g2)>1:
print [g1,g2]
break