亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美精品第1页| 午夜免费久久看| 亚洲一线二线三线视频| 精品一区二区三区在线观看 | 中文字幕一区二区三区不卡| 亚洲国产精品久久一线不卡| 国产白丝网站精品污在线入口| 欧美日韩欧美一区二区| 国产精品沙发午睡系列990531| 日韩成人伦理电影在线观看| 91网站最新地址| 国产欧美日韩一区二区三区在线观看 | 国产欧美日韩麻豆91| 日韩制服丝袜av| 欧美日韩中文精品| 日韩毛片视频在线看| 国产成+人+日韩+欧美+亚洲| 欧美一级高清大全免费观看| 亚洲影视资源网| 欧洲日韩一区二区三区| 成人欧美一区二区三区1314| 成人免费精品视频| 国产欧美日韩在线视频| 国产91精品入口| 久久精品亚洲麻豆av一区二区| 蜜臀av一区二区三区| 69久久夜色精品国产69蝌蚪网| 一区二区三区波多野结衣在线观看| 国产91精品免费| 中文久久乱码一区二区| 懂色av一区二区在线播放| 精品国产a毛片| 国产中文一区二区三区| 久久网这里都是精品| 国产精品自拍一区| 欧美国产日韩a欧美在线观看| 国产精品99久久久久久似苏梦涵| 久久综合五月天婷婷伊人| 国产在线精品视频| 中文字幕免费观看一区| voyeur盗摄精品| 一区二区国产视频| 欧美一区二视频| 狠狠色伊人亚洲综合成人| 国产日韩欧美精品综合| 成人ar影院免费观看视频| 18成人在线视频| 在线观看日韩毛片| 亚瑟在线精品视频| 日韩午夜在线观看视频| 国产一区在线精品| 亚洲欧洲国产专区| 在线精品国精品国产尤物884a| 国产一本一道久久香蕉| 精品剧情v国产在线观看在线| 国产精品综合在线视频| 成人免费一区二区三区视频| 91成人国产精品| 麻豆国产精品官网| 国产精品不卡在线| 欧美一区二区三区在线看| 国产精品中文有码| 亚洲精选视频免费看| 91精品国产综合久久久蜜臀粉嫩| 极品瑜伽女神91| 亚洲人成伊人成综合网小说| 在线不卡中文字幕| 成熟亚洲日本毛茸茸凸凹| 一区二区三区四区不卡视频 | 欧美大片一区二区| 成人app网站| 日本怡春院一区二区| 国产精品伦理一区二区| 777奇米成人网| k8久久久一区二区三区| 日本最新不卡在线| 亚洲日本va午夜在线影院| 日韩精品一区二区在线| 色婷婷av一区二区三区之一色屋| 免费精品视频最新在线| 亚洲免费观看高清完整版在线观看熊 | 久久免费精品国产久精品久久久久| 不卡的电视剧免费网站有什么| 日韩国产欧美一区二区三区| 亚洲婷婷在线视频| 久久久蜜桃精品| 欧美日韩国产电影| 色综合久久中文综合久久97| 国产精品自拍在线| 久久99久久久久| 午夜不卡av免费| 亚洲欧洲综合另类| 国产精品美女视频| 欧美精品一区二区三区蜜桃视频| 在线视频综合导航| 91婷婷韩国欧美一区二区| 国产精品12区| 国内精品视频一区二区三区八戒| 午夜精品久久久久久久| 中文字幕亚洲区| 国产午夜亚洲精品午夜鲁丝片 | 色狠狠综合天天综合综合| 国产成人精品免费在线| 久久国产精品99久久人人澡| 亚洲h在线观看| 亚洲综合图片区| 一区二区免费在线播放| 亚洲视频一区二区免费在线观看| 国产蜜臀97一区二区三区| 精品国产91亚洲一区二区三区婷婷 | 国产河南妇女毛片精品久久久| 日韩高清在线电影| 天堂av在线一区| 亚洲第一在线综合网站| 亚洲电影你懂得| 午夜激情久久久| 日本sm残虐另类| 麻豆精品国产91久久久久久| 日产国产欧美视频一区精品| 日韩福利电影在线观看| 日韩中文字幕亚洲一区二区va在线| 香蕉乱码成人久久天堂爱免费| 洋洋av久久久久久久一区| 亚洲激情av在线| 亚洲va欧美va人人爽午夜| 婷婷成人综合网| 日韩成人伦理电影在线观看| 捆绑紧缚一区二区三区视频| 精品亚洲porn| 成人免费观看av| 91国偷自产一区二区使用方法| 久久精品亚洲麻豆av一区二区| 国产欧美日韩精品a在线观看| 国产精品久久久久毛片软件| 亚洲天堂免费在线观看视频| 亚洲韩国一区二区三区| 欧美a一区二区| 国产不卡视频在线观看| 色综合久久久久网| 欧美人牲a欧美精品| 精品国产制服丝袜高跟| 国产精品少妇自拍| 亚洲sss视频在线视频| 国产一区二区三区在线观看精品| 99在线热播精品免费| 欧美老人xxxx18| 国产欧美在线观看一区| 亚洲高清不卡在线观看| 激情成人综合网| 色婷婷久久久亚洲一区二区三区 | 成人短视频下载| 欧美肥胖老妇做爰| 精品sm在线观看| 亚洲欧美日韩国产中文在线| 免费观看成人鲁鲁鲁鲁鲁视频| 国产精品一区二区你懂的| 欧美亚洲国产一卡| 久久久91精品国产一区二区精品| 亚洲男帅同性gay1069| 久久aⅴ国产欧美74aaa| 日本精品裸体写真集在线观看| 精品久久久久久久人人人人传媒| 中文字幕在线观看不卡| 久久精品国产99国产| 在线免费亚洲电影| 国产人成亚洲第一网站在线播放| 亚洲成人在线观看视频| 成人激情免费电影网址| 日韩欧美一区在线观看| 亚洲综合久久久久| 成人午夜视频在线| 精品国产第一区二区三区观看体验| 一区二区三区四区五区视频在线观看 | 国产成人午夜电影网| 欧美日韩免费观看一区二区三区| 国产亚洲污的网站| 老司机精品视频导航| 欧美日韩亚洲另类| 亚洲欧美日韩久久| av中文字幕一区| 国产清纯在线一区二区www| 日本三级亚洲精品| 欧美日韩一区在线| 亚洲精品免费看| 99在线精品视频| 国产精品美女一区二区三区| 国产精品一区三区| 337p日本欧洲亚洲大胆精品| 蜜臀久久久99精品久久久久久| 欧美人伦禁忌dvd放荡欲情| 一级日本不卡的影视| 97精品超碰一区二区三区| 中文字幕国产一区| 成人精品小蝌蚪| 国产精品久久久久久久裸模| 成人免费三级在线| 国产精品视频九色porn| 成人性生交大片免费| 国产精品萝li| 色婷婷精品久久二区二区蜜臂av |