zoukankan      html  css  js  c++  java
  • 2021mrctf------nomore

    因为 $frac{y+1}{x}$ 是整数。

    (1) 若 $y=x-1$ 

    $A=1+(x-1)^{5}+1$

    经计算 $x$ 无解

    (2)若 $y=k*x-1$ 

    $A=(x-1)^{7}+(k*x-1)^{5}+k$

    由式子可知, $x,k$  和 $A$ 正向先关,且提示 $k$ 很小,所以可以考虑二分。效率 $O(klog_{2}^{x})$

    A = 2235930885430590738951770802593215586722001521194365487273377655750584443688709547709496531484159367793509666612116139038917661713102981488722293426038029073850795986080412124312908732573382156365974821471629333126275130148211145598662897276781331183691743094904957217401055325352877284530068805608962270139656431076370452327497416723045785664344412694060886085511378779487559306015113302658964110922621164879307182468690182325142055960562810349297544601157473985262796723316777380726315782859115449976700612343978057140270903396910431420116573138154719798955123904805279320166126412714788508008881174164656203605409187705643395043643983135944514470267283183175620492198093264226038082725867230101096344723124629565311122528005863046865164876192248803940590219355154176343702897505891392317123983475290611327887699795851456183931854177169939743970260837586185988111368384484356413787993370384262996486824251003884057486063787194241555190688935624792041028246639984544749568167915235629185515957106136630401960066317998226671344793061752525215496195839080165952892472180997564802474095868944184005854120238623750555477937802107959321257495435617363809377093354132077991399603767147974592666019334636208414969819333321639542282741932229892501074615920120228860717401055433206357806353717291748096464569063777964784860874773660469621546777686833078007220613545223169043960754010332944526795605043595879174073360317477199909570141202125189377475655277483919081658123820105695508771837612756891055031293872293977244105248233915807603916034288916844336329883443200123825714530812637709561686224468031953278836676202928878535091578725509651544544672494980806630321114490828976895602038151224026672265830787863940762596976124958000977955469148027648603199590311852993367450800166591526272653355552342455506908317529193196174849749103073968182002498580115241030154502931088245539152380579199202750010140022979979488971008874424439325749039212427088023136971891092490697689178097172878439007028844083681030357488034860471042630885195387680286557424780235116405464735985082715745087677866688657626763753940919966662710093619034074861812080778855241391731006
    maxn = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    
    def f(x,k):
        return pow(x-1,7)+pow(k*x-1,5)+k-A
    
    def binary_search(l,r,k):
        while l<=r :
            mid = (l+r)//2
            res = f(mid,k)
            if res == 0 :
                return(mid,1)
            if res < 0:
                l=mid+1
            else:
                r=mid-1
        return (mid,f(mid,k) == 0)
    
    
    k=2
    while 1:
        (x,pd) = binary_search(1,maxn,k)
        if pd:
            print(x,k)
            break
        k=k+1

    解得

    x=3009497962071627970325880719364587885671010480057866287334251735956364570350347087026477982283392009667042015682364869764534877202626872343001563490279098970253786309533656152965171286503259912849977668331206169132653702870703716072003169079329188859516303445545911170476352380900189590650131003576924340724

    k=84

    secret=7754486886526049025

    根据条件

    $e^{3}+p^{3}+q^{3}==secret$

    暴力枚举出  $e,p$ 判断 $q$ 是否符合条件

    效率大概是 $O(e*1e5*logA) $ ( $1000000-3000000$ 的质数大概有 $1e5$ 个)

    #include<bits/stdc++.h>
    #define ull unsigned long long
    using namespace std;
    const int N=3e6+5;
    bool ispri[N];
    int top,pri[N];
    ull secret=7754486886526049025;
    void getpri(){
        ispri[0]=1;
        for(int i=2;i<=3000000;i++){
            if(!ispri[i])pri[++top]=i;
            for(int j=1;j<=top&&i*pri[j]<=3000000;j++){
                ispri[i*pri[j]]=1;
                if(i%pri[j]==0)break;
            }
        }
        int now=0;
        for(int i=1;i<=top;i++){
            if(pri[i]>1000000)pri[++now]=pri[i];
        }
        top=now;
    }
    ull pow(int x){
        return (ull)x*(ull)x*(ull)x;
    }
    int calc(ull tmp){
        int l=1000000,r=3000000;
        if(tmp<pow(l)||tmp>pow(r))return 0;
        int mid;
        while(l<=r){
            mid=(l+r)>>1;ull res=pow(mid);
            if(res==tmp)return mid;
            if(res<tmp)l=mid+1;
            else r=mid-1;
        }
        return 0;
    }
    ull gcd(ull x,ull y){
        if(x==0)return y;
        return gcd(y%x,x);
    }
    int main(){
        getpri();
        for(int e=9000;e<=10000;e++){
            for(int i=1;i<=top;i++){
                ull tmp=(ull)secret-pow(pri[i])-pow(e);
                int q=calc(tmp);
                if(ispri[q])continue;
                int p=pri[i];
                ull phi=(ull)(p-1)*(q-1);
                if(gcd((ull)e,phi)!=1)continue;
                printf("e = %d
    p = %d
    q = %d
    ",e,p,q);
                return 0;
            }
        }
        return 0;
    } 

     解得

    e = 9509
    p = 1076303
    q = 1866989

  • 相关阅读:
    zabbix验证微信
    free
    有名管道和无名管道
    shell实现并发控制
    TCP/IP协议簇 端口 三次握手 四次挥手 11种状态集
    自动化运维
    JSON对象(自定义对象)
    对象中属性的遍历、删除与成员方法
    对象间的赋值操作
    自定义类
  • 原文地址:https://www.cnblogs.com/Jessie-/p/14676396.html
Copyright © 2011-2022 走看看