在做rsa题目时,经常会遇到因素分解的问题,而因素分解里有一个很出名的工具叫yafu.
yafu的介绍是:
当p、q的取值差异过大或过于相近的时候,使用yafu可以快速的把n值分解出p、q值
但是什么是过大或过于相近呢?
我写了以下代码进行测试:

import libnum
import gmpy2p=libnum.generate_prime(1024)
#下一个素数
q=gmpy2.next_prime(p)
for i in range(1,100):q=gmpy2.next_prime(q)
print("p:",p)
print("q:",q)
print("p*q:",p*q)
print("p/q:",p/q)
print("q-p:",q-p)
p: 141566772919618364127744850865533440414451206413310552358860619218346041489973446709470153037832406595022828277505378043753937827321848214778611319490135099441024368353503518118174023614228762435821890903396216072465699868586873318521161771813178260640162972593382571988438922009337540098233641719966903998293
q: 141566772919618364127744850865533440414451206413310552358860619218346041489973446709470153037832406595022828277505378043753937827321848214778611319490135099441024368353503518118174023614228762435821890903396216072465699868586873318521161771813178260640162972593382571988438922009337540098233641719966904070799
p*q: 20041151194874791408668803994299467976146838731991726041835833756559457643526796140805936752400765487514377896972405104255857736705179851571753546042304842281851730609772928345843285007556770393502638715132818326956700372923695896246632931021336910629173334552735362800684809455265510119627798422002699203587594064154692733408095125279526506070337909800902123390255376612555517959503622606047125811497069585133574857573750212622547932170832463777309717491271075702255996884402738913944970999953396182243784413123496990742310169940156972588999353996804299428022670005102722161765894588291597654429629061169331047146107
p/q: 1.0
q-p: 72506

从这个输出也可以看出,p到q间间隔了100个素数,而差值为72506,平均每两个素数之间的差是725,72506相对于这个大素数来说还是很小,以致于他们之间比值还是1.0

把p*q的值放到yafu里分解:

yafu-x64.exe factor(20041151194874791408668803994299467976146838731991726041835833756559457643526796140805936752400765487514377896972405104255857736705179851571753546042304842281851730609772928345843285007556770393502638715132818326956700372923695896246632931021336910629173334552735362800684809455265510119627798422002699203587594064154692733408095125279526506070337909800902123390255376612555517959503622606047125811497069585133574857573750212622547932170832463777309717491271075702255996884402738913944970999953396182243784413123496990742310169940156972588999353996804299428022670005102722161765894588291597654429629061169331047146107) >>输出结果:
>fac: factoring 20041151194874791408668803994299467976146838731991726041835833756559457643526796140805936752400765487514377896972405104255857736705179851571753546042304842281851730609772928345843285007556770393502638715132818326956700372923695896246632931021336910629173334552735362800684809455265510119627798422002699203587594064154692733408095125279526506070337909800902123390255376612555517959503622606047125811497069585133574857573750212622547932170832463777309717491271075702255996884402738913944970999953396182243784413123496990742310169940156972588999353996804299428022670005102722161765894588291597654429629061169331047146107
fac: using pretesting plan: normal
fac: no tune info: using qs/gnfs crossover of 95 digits
div: primes less than 10000
fmt: 1000000 iterations
Total factoring time = 7.4970 seconds***factors found***P309 = 141566772919618364127744850865533440414451206413310552358860619218346041489973446709470153037832406595022828277505378043753937827321848214778611319490135099441024368353503518118174023614228762435821890903396216072465699868586873318521161771813178260640162972593382571988438922009337540098233641719966904070799
P309 = 141566772919618364127744850865533440414451206413310552358860619218346041489973446709470153037832406595022828277505378043753937827321848214778611319490135099441024368353503518118174023614228762435821890903396216072465699868586873318521161771813178260640162972593382571988438922009337540098233641719966903998293ans = 1

后续,我又进一步计算了下:
当两个素数之间间隔1000个素数时,发现平均素数间隔是645。
当两个素数之间间隔10000个素数时,发现平均素数间隔是715。

最后发现这种方法还是太慢,我直接按比例增长:

import libnum
import gmpy2p=libnum.generate_prime(1024)
#下一个素数
q=gmpy2.next_prime(int(p*1.05)) print("p:",p)
print("q:",q)
print("p*q:",p*q)
print("p/q:",p/q)
print("q-p:",q-p)

输出结果:

p: 115572347070016580215507242308636343714210069363622314287140999792738235445053532383274708312874784322670865444911536762108855282843662652806238996805302247524895835402769172349629358340259633765420691596422482340934922563816048656742734554186269128120676349840177382723512014064696579032015103670724774092809
q: 121350964423517405861358958915115678810075337286855436744382211045320123771644810025295114971465769128604633186552644004980318729421288815446886030632729931648198264438139737674706237295462105739661137137892522985141269061157682835459446449109852570550505968058612171538938921651681284618083839036390213943503
p*q: 14024815777635988125537183514586475274219183779665756062194214981118406731889656474398388439702313017575189435154693113870916861478994183647714504658282456384480108314528066155036837708616833959200189522607876841776519707819946773920421802987354179710930633719872269551037408432988223352888756743059592276438398613457443019314056802135839475751450397926988090990936372228677724138679431980054372529723965521353224512901791488075045782537224757517146754948086587842475213923223902052868316025452705307875989597418054733484528558727035032993966935566847153327008893248379253347129590715044418685231766005037809204569927
p/q: 0.95238095238095244
q-p: 5778617353500825645851716606479335095865267923233122457241211252581888326591277642020406658590984805933767741641107242871463446577626162640647033827427684123302429035370565325076878955202471974240445541470040644206346497341634178716711894923583442429829618218434788815426907586984705586068735365665439850694

把p*q的值放到yafu里分解,发现还是可以分解的,只是时间要的很长,目前显示需要的时间为25小时,还不知道最张时间会不会再增长。
最后,经过反复测试
当p和q的差值相比于p和q的数量级来说,几乎很小时,才能很快分解出来p和q,当当p和q的差值相比于p和q的数量级来说,达到1%,0.1%时,用yafu分解就几乎分解不出来了。

以上仅为一次试验得出的结论,仅供参考,不具有普遍性。

每日10行代码173:测试下yafu的质因数分解能力相关推荐

  1. 每日10行代码31:爬取人民日报一日的所有文章并存入数据库

    今天又增加了存入数据库的功能,至此,爬取人民日报的项目已经结束,下一步我将跟另一篇文章的博主比较下代码,从他那学一些有用的东西. import requests import re from bs4 ...

  2. 每日10行代码57: appium测试坚果手机出现socket hang up报错的解决

    今天在用appium测试的时候,老是出现socket hang up的报错,在网上搜索了下,找到了答案,原来是手机的系统自动把appium需要的后台进程给优化掉了. 解决办法也很简单,就是设置系统,不 ...

  3. 每日10行代码67:openpyxl指定工作表(sheet)的5种方法

    20210330更新了部分内容. 今天工作时,写了一小段代码,大概功能就是比对excel里的数据与数据库里的数据差异,具体实现就是根据excel里维度列(就是sql中where后的部分)到数据库查找相 ...

  4. 每日10行代码44:用python操作手机点击淘金币

    大概需要的基础知识如下: 找到当前程序的package和launch activity adb shell dumpsys window windows | findstr "Current ...

  5. 每日10行代码65:python操作淘宝做淘金币能量任务(11月7日可用)

    淘宝里的淘金币有很多任务可以做,做了之后增加第二天获取的淘金币数量,为了得到更多的淘金币,我做了一个脚本,辅助做任务. import os import time import random impo ...

  6. 每日10行代码60: 天猫双11自动撸猫得喵币

    今年的双11又到了,其中有个游戏挺无脑,就是不断的点猫来获取喵币,我写了个程序帮助我自动撸猫.为了不被后台检测到,我对点击的速度和点击的位置做了一定的随机变动.也正因为加了这点随机性,所以程序看起来稍 ...

  7. 每日10行代码82:网上购物活动满减凑单计算器

    马上又到双十二了,我也在当当网上选了一些书准备下单了,但是有个问题难住我了,我选了9多本价格不同的书,并且领了一张满200减40的券,怎么让我这40块券最大化利用呢,也就是说买的商品要比200块高,但 ...

  8. 每日10行代码47:python自动领取淘金币完整代码:基于坐标的模拟点击(2020年10月10日可用)

    今天把领淘金币的代码写完了,目前可以适应不同的分辨率,原理是模拟手去点击,就相当于手机上运行个按键精灵. 使用前提: 电脑上配置好了adb工具. 手机打开了开发者选项. 安装了手机淘宝. 手机淘宝是标 ...

  9. 每日10行代码169:使用xlwings修改excel格式,设置中国式报表

    背景:工作上,经常需要从数据库产出报表,由于这种报表需要提交给领导看,所以对格式的要求要比平常高不少,每次设置格式虽然花的时间不算太多,但是长期下来,积少成多,花在格式上的时间就会太多,为了方便调整格 ...

  10. 每日10行代码83:做淘宝双12活动任务,拿欢乐币

    淘宝双12又出活动了,由于最近比较忙,到今天才有时间做下任务,这次的任务逻辑比较简单,所以就不用appium了, 直接用adb命令来实现. 脚本运行前提: 打开"做任务拿金币"的页 ...

最新文章

  1. 【旧文新读】解释“闭包”需要几行代码?
  2. python py生成及调用pyc文件
  3. 移动设计需避免四种常见的用户体验失败
  4. mardown文件图片技巧
  5. Springsecurity搭建自定义登录页面
  6. Linux下的tar压缩解压缩命令详解(转)
  7. word删除分页符_5个Word删除空白页的方法,简单又高效,总有一个能帮你轻松秒杀...
  8. python和java的区别-python与java区别
  9. iOS 编译后的Archiveing 界面在 Windows-organizer 下
  10. 多频段压缩参数均衡器:Initial Audio Dynamic EQ Mac
  11. 如何通过注册表修改默认程序
  12. vs code 代码格式化整理
  13. php过气了吗,她怎么就过气了?
  14. Unity Rendering Mode
  15. springboot 解决java.lang.ArrayStoreException
  16. Java线程的6种状态(NEW,RUNNABLE,BLOCKED,WAITING,TINED_WATING,TEMINATE)
  17. 国产CSM32RV20是基于RISC-V核的低功耗MCU芯片
  18. CSDN问答——精选问答Vol.7
  19. ThingsBoard教程(十九):规则节点概览介绍
  20. java浅谈线程安全之锁

热门文章

  1. 为什么企业要做CMMI资质认证?
  2. 项目服务器装系统,项目1服务器系统的安装.ppt
  3. 安装Keil uVision5 破解失败
  4. 外卖程序_淘宝客系统_淘客小程序-淘客系统,外卖返利程序,外卖程序,返利程序
  5. 【转】winrar命令行详解
  6. 什么软件测试情侣头像,在线识别情侣头像软件
  7. 菜鸟学习oracle一看就会
  8. ABAQUS后处理常用功能
  9. 3dsmax软件和maya软件各自的优劣势是什么?
  10. 鸿蒙OpenHarmony hi3516开发板,标准系统实现智能门禁