素因数分解、目下更新中のコード置き場
def kougo2alpha(als,r1,r2,s1=1,s2=1):
return [((r1*als[i][0]+s1)*(r2*als[i][1]+s2),[(r1*als[i][0]+s1),(r2*als[i][1]+s2)]) for i in range(len(als))]
def kougo4alpha(n,hls=[2,2],ils=[1,1]):
ls=[[0,0],[0,1],[1,1],[1,0]]
bls=[]
r1,r2=2,2
#print(sls)
i1,i2=ils[0],ils[1]
if len(hls)>1:
r1,r2=hls[0],hls[1]
j=0
print(n%(r1*r2),r1,r2,i1,i2,'r i is?')
while (r1*r2)**j<n:
j+=1
if j<5:
j=5
for i in range(j+3):
#for j in range(len(ls)):
if i>j:
i=j
if len(ls)>300000:
print('memory is too big')
return []
ko=kougo2alpha(ls,r1,r2,i1,i2)
#print(n//(r1*r2)**(j-i))
for k in range(len(ko)):
#print(ko[k])
if ugojo(abs(ko[k][1][0]),n)>1 or ugojo(abs(ko[k][1][0]),n)>1 or ugojo(abs(ko[k][0]),n)>1:
#print('matched')
ug=ugojo(abs(ko[k][1][0]),n)
if ug>1 and ug!=n:
return [ug,n//ug]
ug=ugojo(abs(ko[k][1][1]),n)
if ug>1 and ug!=n:
return [ug,n//ug]
q=n//(r1*r2)**(j-i)-(r1*r2)*(ko[k][1][0]//r1)*(ko[k][1][1]//r2)
r=abs(i2*ko[k][1][0]//r1+i1*ko[k][1][1]//r2)
s=abs(ko[k][1][0]//r1*ko[k][1][1]//r2)
if s>0 and r>0 and (n%(s))%r!=(i1*i2)%r:
ug=ugojo(s,r)
#print('s',s,'ug',ug,'%s',n%(s),'%r',n%r,'r',r,n%ug)
if ug>1 and n%ug!=1:
1
continue
if i>5 and abs(ko[k][0])>(n*r1*r2)//(r1*r2)**(j-i) or abs(ko[k][0])<(n)//(r1*r2)**(j-i+1):
continue
bls+=[[ko[k][1][0],ko[k][1][1]]]
if q>2*r:
if ko[k][1][1]//r2!=0:
#print('picked')
bls+=[[ko[k][1][0]//r1+(q-2*r)//(ko[k][1][1]//r2),ko[k][1][1]//r2]]
if ko[k][1][0]//r1!=0:
#print('picked')
bls+=[[ko[k][1][0]//r1,ko[k][1][1]//r2+(q-2*r)//(ko[k][1][0]//r1)]]
if q<-2*r:
if ko[k][1][1]//r2!=0:
#print('picked')
bls+=[[ko[k][1][0]//r1+(q+2*r)//(ko[k][1][1]//r2),ko[k][1][1]//r1]]
if ko[k][1][0]//r1!=0:
#print('picked')
bls+=[[ko[k][1][0]//r1,ko[k][1][1]//r2+(q+2*r)//(ko[k][1][0]//r1)]]
ls=bls
return []
def controller(n,r,t=20):
ni,j=2**r,n%4**r
q=1
for i in range(ni):
l=1
m=1
qls=[]
while len(qls)==0 and l<t:
#print(q)
q+=2**l
for s in range(q):
if (n%2**t+4**l*s)%q==0:
while (n%2**t+4**l*s)%q==0 and (j+4**l*s)>0 and l<t:
qls+=[(n%2**t+4**l*s)//q]
l+=1
else:
m=s
continue
l+=1
m=s
qls=list(set(qls))
for jj in range(len(qls)):
#print(q,m,qls[jj])
x,y=j-q+1,j-qls[jj]+1
pr=kougo4alpha(n,[ni,ni],[x,y])
if len(pr)>1:
return pr
return []
p=2000497*2002579
print(controller(p,6,10))
2000497*2002579にて素因数分解を確認
p=2139107*2103011*2138387にてcontroller(p,7,12)条件で2139107, 4497051383257への分解を確認(2024/1/24)
この記事で更新しているプログラムの説明が書かれている記事
⭐︎参考情報
ヘンゼルの持ち上げ補題
この記事が気に入ったらサポートをしてみませんか?