一般数体ふるい法に使うふるいのプログラムを作ってみました。ただ、難しくてどう実装すればいいのかわからない計算式もあったので、できる範囲だけでの実装です。4桁くらいの小さい数までしかしっかりと動かせない感じです。
import numpy as npimport mathimport randomdef ugojod(a,b): if a<0: a*=-1 if b<0: b*=-1 if a>b: a,b=b,a
素因数分解、目下更新中のコード置き場
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
def nikou(a,d=[]): dd=[] #print(a,len(a),d) if len(a)==1: if len(d)==0: return [a] for i in range(len(d)): dd+=[a+d[i],d[i]] return dd else: #print(a,len(a),d) if len(d)==
今回は記事もプログラムも短いです。余分なモジュールも一切要りません。
プログラム例
def nup(a,b,r): #a=2*(2*x+1)-x-1 x=0 xls=[] wls=[] w=0 for i in range(3,100): if (r+a*b)%i==0 and a>i: #print(i) x=(a+(i-a)%i)//i w=(-a)%i
こないだの記事から派生させて作っていたプログラムがついに素因数分解をしました!
ということで素案のプログラムを書き出しておきます!
def kyoritan(pa,uug,ko=0): #ko=0 #print(pa,uug) for i in range(27,-1,-1): if abs(ko*(ko+uug)+uug-pa)>abs((ko+2**i)*(ko+2**i+uug)+uug-pa): ko+=2**
階乗の高速計算ができそうなコードを作ってみました。
def dif(a,b,c,d): ac=c-a bd=d-b return a*bd+d*aclis=[1,2,3,4]lis=[5,6,7,8]lis=list(range(1,17))lis2=[]for i in range(2):#ループの回数。4**i lens2=[] lens=len(lis)//4 for j in range(lens): dif1=di
def ugojo(a,b): if a<0: a*=-1 if b<0: b*=-1 if a>b: a,b=b,a while a>0: a,b=b%a,a #print(a,b) return bdef xgcd(a,b): x0,y0,x1,y1=1,0,0,1 while b!=0: q,a,b=a//b,b,a%b x0,x1