コードだけ先に…

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)==0:
            return nikou(a[:-1],[[a[-1]]])
        ee=[]
        for i in range(len(d)):
            ee+=[d[i]+[a[-1]],d[i]]
        ee+=[[a[-1]]]
        dd+=nikou(a[:-1],ee)            
    return dd 
def kannibunkai(a):
    b=abs(a)
    ls=[]
    for i in range(2,100):
        while b>1 and b%i==0:
            ls+=[i]
            b//=i
    if b>1:
        ls+=[b]
    return ls 
?def kougo1(a):
    ls=kannibunkai(a+(a+1))
    ls+=[1]
    ls=nikou(ls)
    kls=[np.prod(ls[i]) for i in range(len(ls))]
    tuikls=[((a*2+1)//kls[i]) for i in range(len(kls))]
    ret=[]
    for i in range(len(kls)):
        if kls[i]*tuikls[i]>2*a+1:
            continue
        ret+=[[kls[i]//2,tuikls[i]//2]]
    return ret
def kougo2(als):
    ret=[]
    for i in range(len(als)):
        k=(4*als[i][0]+1)*(4*als[i][1]+1)
        if all([ret[j][0]!=k for j in range(len(ret))])==True:
            ret+=[(k,[(4*als[i][0]+1),(4*als[i][1]+1)])]
    return ret
def kougo3(n):
    ret=[]
    for i in range(100):
        for j in range(i,100):
            l=(2*i+1)*(2*j+1)
            m=4*(i+j)+2
            o=kaihei(n//l,2)[1]
            if o>0  and n%l==(o*m+1)%l:
                print(2*i+1,2*j+1,l,m,o)
                print(o*(2*i+1)+1,o*(2*j+1)+1,(o**2*(2*i+1)*(2*j+1))-n)
                mamari=(o**2*(2*i+1)*(2*j+1))-n
                if mamari%(m//2)==1:
                    q=(mamari-1)//(m//2)
                    print((o*(q*i+1)+1)*(o*(q*j+1)+1),o*(q*i+1)+1,o*(q*j+1)+1,'matched')
                if mamari%(m//2)==(-1)%(m//2):
                    q=(mamari+1)//(m//2)
                    print((o*(q*i+1)-1)*(o*(q*j+1)-1),o*(q*i+1)-1,o*(q*j+1)-1,'matched')

コードだけ先に載せます。説明は時間ができたら書きます。まだコードの意味がよく把握しきれていない。nikouは二項定理に従ってn個の選択肢の組み合わせを列挙するためのプログラムなので、数字の入れ方によっては無茶苦茶重くなることがあるのに注意。

この記事が気に入ったらサポートをしてみませんか?