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

  • 相关阅读:
    Eclipse 导入项目乱码问题(中文乱码)
    sql中视图视图的作用
    Java基础-super关键字与this关键字
    Android LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot)的参数理解
    Android View和ViewGroup
    工厂方法模式(java 设计模式)
    设计模式(java) 单例模式 单例类
    eclipse乱码解决方法
    No resource found that matches the given name 'Theme.AppCompat.Light 的完美解决方案
    【转】使用 Eclipse 调试 Java 程序的 10 个技巧
  • 原文地址:https://www.cnblogs.com/Jessie-/p/14676396.html
Copyright © 2011-2022 走看看