亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cm.cpp

?? 比較新的功能強大的rsa算法源代碼,方便使用.
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/*
 * cm.cpp - Finding an elliptic curve and point of nearly prime order
 * See IEEE 1363 Annex A for documentation!
 *
 * !!! New much improved version - March 2002
 * !!! Now tested for D up to 10^7
 *
 * !!! New faster version - uses Floats instead of Flashs - November 2003
 * !!! Now 100 times faster!
 * !!! Now tested for D up to and beyond 10^9 
 *
 * !!! New invariants - gamma2, w3, w5, w7 and w13. Thanks to Marcel Martin.
 *
 * Sometimes its better to use the -IEEE flag, as this can often be faster 
 * than the Gamma2 invariant, as although it requires a bigger "class number", 
 * it needs less precision.
 *
 * Uses functions from the MIRACL multiprecision library, specifically
 * classes:-
 * Float   - Big floating point 
 * Complex - Big Complex float
 * Big     - Big integer
 * ZZn     - Big integers mod an integer
 * FPoly   - Big Float polynomial
 * Poly    - Big ZZn polynomial
 *
 * Written by Mike Scott, Dublin, Ireland. March 1998 - March 2004
 *
 * Full MIRACL source is available from 
 * ftp.computing.dcu.ie/pub/crypto/miracl.zip
 *
 * MIRACL is a shareware source code product.
 * However it is free for educational and non-profit making use
 * Queries to mike@computing.dcu.ie
 * Web page http://indigo.ie/~mscott
 */

#include <iostream>
#include <fstream>
#include <cmath>
#include <cstring>
#include "ecn.h"
#include "complex.h"
#include "flpoly.h"
#include "poly.h"

using namespace std;

miracl *mip;

FPoly T[25];  // Reduced class Polynomial. 
static char *s;
BOOL fout,suppress,three;

// F(z) Function A.13.3

Complex Fz(Complex z)
{
    Complex t;
    int sign=1;
    Complex osum,sum=(Float)1;

    if (z.iszero()) return sum;

    Complex zi=z;
    Complex zj=z*z;
    Complex r=z;
    Complex z3=zj*z;

    forever
    { // do 2 terms at a time....
        t=zi+zj;
        osum=sum;
        if (sign) sum-=t;
        else      sum+=t;

        if (sum==osum) break;

        r*=z3;        
        zi*=r; zj*=r; zj*=z;

        sign=1-sign;
    }

    return sum;
}

// Fj(A,B,C) function A.13.3

Complex F(int j,Big A,Big B,Big C,Big D,int N)
{
    Complex t,theta24,theta,theta2,theta3,theta6;
    Float sd;

    if (j>=3)
    { // Gamma 2 and Morain's invariants
        sd=-sqrt((Float)D);
        t=Complex(sd*fpi(),(fpi()*(Float)B));    
        t/=((Float)A);
        theta=exp(t);
        if (j==3)
        {
            theta3=theta;
            theta3*=theta3;
            theta3*=theta;
            theta6=theta3;
            theta6*=theta6;
            t=theta*pow((Fz(theta6)/Fz(theta3)),8);
            return (256*t*t*t+1)/t;
        }
        if (j==4)
        {
              return (pow(Fz(theta)/Fz(pow(theta,N)),24/(N-1))/theta);   
        }
        return 0;
    }

    sd=-sqrt((Float)D);
    t=Complex(sd*fpi(),(fpi()*(Float)B));    

    t/=(Float)(24*A);
    theta24=exp(t);                                // theta^(1/24)
    theta=pow(theta24,24);                         // theta

    if (j!=2) 
        t=recip(theta24);      // -24th root
    else  
        t=theta24*theta24;     // 12th root

    theta2=theta;
    theta2*=theta2;

    if (j==0) return (t*Fz(-theta)/Fz(theta2));
    if (j==1) return (t*Fz(theta)/Fz(theta2));
    if (j==2) return (sqrt((Float)2)*t*Fz(theta2*theta2)/Fz(theta2));
    return 0;
}

int geti(Big D)
{
    Big d=D%8;
    if (d==1 || d==2 || d==6 || d==7) return 3;
    if (d==3)
    {
       if (D%3==0) return 2;
       else        return 0;
    } 
    if (d==5) return 6;
    return 0;
}

int getk(Big D)
{
    Big d=D%8;
    if (d==1 || d==2 || d==6) return 2;
    if (d==3 || d==7) return 1;
    if (d==5) return 4;
    return 0; 
}

int getN(Big D)
{
    if (D%13==0) return 13;
    if (D%7==0)  return 7;
    if (D%5==0)  return 5;
    if (D%3==0)  return 3;
    return 2;
}

// A.13.3

void class_poly(Complex& lam,Float *Fi2,Big A,Big B,Big C,Big D,BOOL conj,BOOL P1363)
{
    Big ac,l,t;
    int i,j,k,g,e,m,n,dm8;
    Complex cinv;

    if (P1363)
    {
        g=1;
        if (D%3==0) g=3;

        ac=A*C;
        if (ac%2==1) 
        {
            j=0;
            l=A-C+A*A*C;
        }
        if (C%2==0)  j=1;
        if (A%2==0)  j=2;

        if (A%2==0)
        {
            t=(C*C-1)/8;
            if (t%2==0) m=1;
            else        m=-1;
        }
        else
        {
            t=(A*A-1)/8;
            if (t%2==0) m=1;
            else        m=-1;
        }
    
        dm8=D%8;
        i=geti(D);
        k=getk(D);
        switch (dm8)
        {
        case 1: 
        case 2:    n=m;
                   if (C%2==0) l=A+2*C-A*C*C;
                   if (A%2==0) l=A-C-A*C*C;
                   break;
        case 3:    if (ac%2==1) n=1;
                   else         n=-m;
                   if (C%2==0) l=A+2*C-A*C*C;
                   if (A%2==0) l=A-C+5*A*C*C;
                   break;
        case 5:    n=1;
                   if (C%2==0) l=A-C+A*A*C;
                   if (A%2==0) l=A-C-A*C*C;
                   break;
        case 6:    n=m;
                   if (C%2==0) l=A+2*C-A*C*C;
                   if (A%2==0) l=A-C-A*C*C;
                   break;
        case 7:    if (ac%2==0) n=1;
                   else         n=m;
                   if (C%2==0) l=A+2*C-A*C*C;
                   if (A%2==0) l=A-C-A*C*C;
                   break;
               
        default: break;
        }
        e=(k*B*l)%48;
        if (e<0) e+=48;
        cinv=pow(lam,e);
        cinv*=(n*Fi2[i]);
        cinv=pow(cinv*pow(F(j,A,B,C,D,0),k),g);
    }
    else
    {
        int N=getN(D);   
// adjust A and B

        if (N==2)
        {
            j=3;
            if (A%3!=0)
            {
                if (B%3!=0)
                {
                    if ((B+A+A)%3!=0) B+=(4*A);
                    else              B+=(A+A);
                }
            }
            else
            {
                if (B%3!=0)
                {
                    if (C%3!=0)
                    {
                        if ((C+B)%3!=0) B+=(4*A);
                        else            B+=(A+A);
                    }
                }
            }
            A*=3;
        }
        else
        {
            j=4;
            if ((A%N)==0) 
            {
                A=C;
                B=-B;
            }
            while (B%N!=0) B+=(A+A);
            A*=N;
        }
        cinv=F(j,A,B,C,D,N);
    }


 // multiply polynomial by new term(s)

    FPoly F;
    if (conj)
    { // conjugate pair
      // t^2-2a+(a^2+b^2) , where cinv=a+ib
        F.addterm((Float)1,2);
        F.addterm(-2*real(cinv),1);
        F.addterm(real(cinv)*real(cinv)+imaginary(cinv)*imaginary(cinv),0);
    }
    else 
    { // t-cinv
        F.addterm((Float)1,1);
        F.addterm(-real(cinv),0);

// store as a linear polynomial, or combine 2 to make a quadratic
        if (T[0].iszero())
        {
            T[0]=F;
            return;
        }
        else 
        {
            F=T[0]*F;      // got a quadratic
            T[0].clear();
        }
    }

// accumulate Polynomial as 2^m degree components
// This allows the use of karatsuba via the "special" function
// This is the time critical bit....

    for (i=1;;i++)
    {
        if (T[i].iszero())
        {
            T[i]=F;             // store this 2^i degree polynomial
            break;
        }
        else
        {
            F=special(T[i],F);  // e.g. if i=1 two quadratics make a quartic..
            T[i].clear();
        }
    }
}

// A.13.2
// Set P1363 to False to calculate class number a la Cohen

int groups(Complex& lam,Float *Fi2,unsigned long D,BOOL doit,BOOL P1363)
{
    unsigned long s,t,A,C,B,TB,lim;
    int cn=0;
    s=lsqrt(D/3,1);
    for (B=0;B<=s;B+=1)
    {
//  cout << "B= " << B << " s= " << s << endl;
        t=D+B*B;
        if (!P1363)
        {
            if (t%4!=0) continue;
            else t/=4;
        }
// cout << "t= " << t << endl;
        lim=lsqrt(t,1);
// cout << "lim= " << lim << endl;
        if (P1363) A=2*B;
        else       A=B;
        if (A==0) A+=1;
        for(;;)
        {
            while (t%A!=0) 
            {
                A+=1;
                if (A>lim) break;
            }

            if (A>lim) break;
            C=t/A;
           
            TB=B;
            if (P1363) TB*=2;
            if (lgcd(lgcd(A,TB),C)==1)
            { // output more class group members
                BOOL conj;
                if (TB>0 && C>A && A>TB) 
                { 
                    conj=TRUE;
                    cn+=2;
                    if (doit)
                    { 
                        if (!suppress) cout << ".." << flush; 
                    }  
                }
                else
                {
                    conj=FALSE;
                    cn+=1;
                    if (doit)
                    {   
                        if (!suppress) cout << "." << flush; 
                    }
                } 
                if (doit) class_poly(lam,Fi2,(Big)A,(Big)B,(Big)C,(Big)D,conj,P1363);
            }
            A+=1;
        }        
    }
    return cn;         // class number
}

// check congruence conditions A14.2.1

BOOL isaD(unsigned long d,int pm8,Big k)
{
    unsigned int dm8;
    unsigned long i;
    BOOL sqr;
    dm8=d%8;
    if (k==1 && dm8!=3) return FALSE;
    if ((k==2 || k==3) && dm8==7) return FALSE;
    if (pm8==3 && (dm8==1 || dm8==4 || dm8==5 || dm8==6)) return FALSE;
    if (pm8==5 && dm8%2==0) return FALSE;
    if (pm8==7 && (dm8==1 || dm8==2 || dm8==4 || dm8==5)) return FALSE;
    sqr=FALSE;
    for (i=2;;i++)
    {
        if (d%(i*i)==0)
        {
            sqr=TRUE;
            break;
        }
        if (i*i>d) break;
    }
    if (sqr) return FALSE;
    return TRUE;
}

// Testing for CM discriminants A.14.2.2

Big floor(Big N,Big D)
{
   Big R;
   if (N==0) return 0;
   if (N>0 && D>0) return N/D;
   if (N<0 && D<0) return (-N)/(-D);
   R=N/D;
   if (N%D!=0) R-=1;
   return R;
}

BOOL isacm(Big p,unsigned long D,Big &W,Big &V)
{
    Big B2,A,B,C,t,X,Y,ld,delta;
    B=sqrt(p-(Big)D,p);
    A=p;
    C=(B*B+(Big)D)/p;
    X=1;
    Y=0;
    ld=0;

    while (1)
    {
        if (C>=A)
        {
            B2=2*B;
            if (B2<0) B2=-B2;
            if (A>=B2) break;
        } 
        delta=floor(2*B+C,2*C);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产乱码最新视频| 日韩av在线发布| 国产精品538一区二区在线| 国产精品污网站| 色哟哟一区二区在线观看| 午夜视频在线观看一区| 久久夜色精品一区| 欧美在线制服丝袜| 国产一区视频在线看| 亚洲另类一区二区| 欧美一区二区三区不卡| 成人网男人的天堂| 午夜久久久久久久久久一区二区| 国产精品麻豆久久久| 国产视频一区在线播放| 欧美三级电影在线看| 国产精品一级片在线观看| 免费观看91视频大全| 日韩毛片一二三区| 精品福利av导航| 91久久精品一区二区| 精品写真视频在线观看| 久久成人免费网站| 国产欧美一区二区精品性色超碰| 欧美日韩国产综合视频在线观看 | 欧美无砖专区一中文字| 国产老女人精品毛片久久| 国内精品伊人久久久久av影院 | 国产精品三级视频| 国产精品乱码久久久久久| 亚洲免费电影在线| 欧美激情综合在线| 欧美一级理论片| 色婷婷亚洲婷婷| 在线不卡中文字幕| 欧美日韩在线综合| 日韩视频在线一区二区| 日韩精品一区二区三区蜜臀| 欧美亚洲国产一区二区三区| 91精品一区二区三区在线观看| 91麻豆免费视频| 成人免费毛片高清视频| 一本大道久久a久久精品综合| 欧美日韩一区在线观看| 日韩欧美一级片| 国产精品人人做人人爽人人添| 亚洲精品免费视频| 伦理电影国产精品| 99免费精品视频| 67194成人在线观看| 欧美一区二区视频网站| 国产欧美一区二区在线| 亚洲成人黄色影院| 亚洲影视在线观看| 亚洲另类春色国产| 久久国产精品区| 99久久国产免费看| 色综合色综合色综合色综合色综合| 在线观看精品一区| 久久久久久久一区| 亚洲国产精华液网站w| 亚洲综合激情另类小说区| 国产乱码精品一区二区三区av| 91麻豆精东视频| 欧美精品一区二区三区高清aⅴ | 亚洲精品中文在线观看| 蜜臀av性久久久久蜜臀aⅴ | 精品一区免费av| 色菇凉天天综合网| 国产亲近乱来精品视频 | 三级精品在线观看| 亚洲网友自拍偷拍| 国产伦精品一区二区三区免费 | 国产精品小仙女| 欧美视频在线一区| 中文字幕一区免费在线观看 | 欧美亚洲国产一区二区三区| 久久免费视频色| 日韩国产高清影视| 91浏览器入口在线观看| 精品国产免费人成电影在线观看四季| 亚洲精品一二三| 成人妖精视频yjsp地址| 精品捆绑美女sm三区| 国产日韩影视精品| 蜜桃视频在线观看一区二区| 欧美色老头old∨ideo| 亚洲精选视频在线| 色综合咪咪久久| 亚洲人成精品久久久久久| 风间由美一区二区av101| 9久草视频在线视频精品| 久久众筹精品私拍模特| 老司机精品视频在线| 日韩无一区二区| 久久国产生活片100| 欧美精品一区二区高清在线观看| 免费三级欧美电影| 欧美大尺度电影在线| 久久精品国产99| 精品精品国产高清a毛片牛牛 | 美女视频黄 久久| 日韩午夜小视频| 国内精品不卡在线| 久久久天堂av| 高清免费成人av| 一区在线观看视频| 91色|porny| 亚洲国产aⅴ成人精品无吗| 欧美特级限制片免费在线观看| 亚洲一区二区三区小说| 在线观看日韩av先锋影音电影院| 亚洲综合一区二区精品导航| 777奇米成人网| 精品在线视频一区| 国产精品视频yy9299一区| 色综合天天综合网国产成人综合天| 日韩免费观看高清完整版在线观看| 蜜臀久久99精品久久久久久9| 精品动漫一区二区三区在线观看 | 亚洲成人一二三| 欧美一区二区在线免费观看| 精品一区二区三区免费毛片爱| 国产校园另类小说区| 91原创在线视频| 日韩国产欧美在线观看| 久久免费偷拍视频| 色婷婷国产精品| 麻豆国产精品官网| 国产精品成人一区二区艾草 | 亚洲综合色丁香婷婷六月图片| 日韩一区二区在线观看视频播放| 国产盗摄一区二区| 久久久精品人体av艺术| 99精品视频中文字幕| 日韩精品一二三区| 国产精品妹子av| 91精品婷婷国产综合久久性色| 国产成人精品一区二区三区网站观看| 一区二区三区免费观看| 日本精品一区二区三区高清 | 色8久久精品久久久久久蜜 | 日韩欧美高清dvd碟片| 成人动漫在线一区| 亚洲视频资源在线| 精品电影一区二区三区| 欧美三级中文字幕| 国产成人99久久亚洲综合精品| 亚洲国产一二三| 国产精品色呦呦| 日韩精品专区在线影院重磅| 在线视频一区二区三| 国产suv精品一区二区883| 丝袜美腿亚洲一区二区图片| 自拍偷拍亚洲综合| 国产日本欧洲亚洲| 精品日韩欧美在线| 在线成人免费视频| 在线观看日韩国产| 99久久精品国产精品久久| 国产在线看一区| 免费的成人av| 日日摸夜夜添夜夜添精品视频| 亚洲欧美日韩国产手机在线 | 国产精品久久久久精k8| 日韩精品一区二区在线| 久久久久久**毛片大全| 欧美精品乱码久久久久久按摩| 91丨porny丨中文| 成人精品高清在线| 国产不卡高清在线观看视频| 精品一区二区三区视频 | 欧美日韩中文另类| 欧美在线你懂的| 91成人国产精品| 在线观看视频一区| 91国产成人在线| 日本韩国精品一区二区在线观看| 99精品视频在线观看| 成人午夜精品在线| eeuss鲁片一区二区三区| a亚洲天堂av| 99综合电影在线视频| fc2成人免费人成在线观看播放 | 蜜桃av一区二区三区| 日韩中文欧美在线| 蜜臀av性久久久久av蜜臀妖精| 美女国产一区二区三区| 精品一区二区免费在线观看| 激情成人综合网| 国产福利一区在线| 不卡一区二区三区四区| 一本一道久久a久久精品综合蜜臀| 一本久久a久久精品亚洲| 欧美性大战久久久久久久蜜臀 | 成人丝袜18视频在线观看| 盗摄精品av一区二区三区| 97精品超碰一区二区三区| 色成年激情久久综合| 91.com在线观看|