当前位置: 首页 > news >正文

大数分解的Shor算法-C#

看代码吧,没有太多要说的

using System.Numerics; using System.Security.Cryptography; namespace ShorAlgorithm; class Program { /********************************************************************* * shor.cc -- Use Shor's Algorithm * to factor a large BigInteger * ChangeLog: * 970225 -- Created by Paul Herman <a540pau@pslc.ucla.edu> **********************************************************************/ static BigInteger GenerateRandomBigInteger() { // 创建一个RandomNumberGenerator实例 using var rng = RandomNumberGenerator.Create(); // 生成一个足够长的字节数组,例如16字节(128位) var randomBytes = new byte[8]; // 可以根据需要增加字节数以生成更大的数 rng.GetBytes(randomBytes); // 将字节数组转换为BigInteger // 注意:这里使用了BigEndianBitConverter,因为BigInteger期望高位在前(大端格式) return new BigInteger(randomBytes); } /******************************************************************** /* Period: This computes the size of the group generated by a mod n /* i.e. |<a>| /********************************************************************/ static int Period(BigInteger a, BigInteger n) { int count; count = 1; while (BigInteger.ModPow(a, count, n) != 1) { count++; //Console.WriteLine(count); } return count; } /********************* /* ShorFactor: Finds a factor of n by looking at the group generated /* by <a> mod n. Let t = |<a>|/2 . Check to see if /* t +/- 1 and n have a common factor. If not, try another a /*********************/ static BigInteger ShorFactor(BigInteger n) { BigInteger a, t1, t2, f1, f2; int r; //我在这里改为随机化 a = GenerateRandomBigInteger(); for (BigInteger j = 2; ; j++) { //随机数a是n的因子 f1 = BigInteger.GreatestCommonDivisor(a, n); if (f1 != BigInteger.One) { Console.WriteLine($"First Found f1 = {f1}"); return f1; } //本质上就是找P序列 //r = Period(a, n); //本质上就是找Q序列 //r=a^j mod n r = (int)BigInteger.ModPow(a, j, n); //如果r为负数,说明a^j mod n的结果是负数,这不应该发生,因为模运算的结果应该在0到n-1之间 if (r < 0) { Console.WriteLine("Bad r"); return BigInteger.One; } //t1和t2分别是a^((a^j mod n)/2) mod n的+1和-1 t1 = BigInteger.ModPow(a, (r >> 1), n); t1 += 1; t2 = t1 - 2; //t1=(a^(r/2) mod n) + 1 //t2=(a^(r/2) mod n) - 1 Console.WriteLine($"At t1 = {t1}"); //测试t1 f1 = BigInteger.GreatestCommonDivisor(t1, n); if (f1 != BigInteger.One) { Console.WriteLine($"Found f1 = {f1}"); return f1; } //测试t2 f2 = BigInteger.GreatestCommonDivisor(t2, n); if (f2 != BigInteger.One) { Console.WriteLine($"Found f2 = {f2}"); return f2; } //如果t1和t2都没有找到因子,那么就换一个a继续试s a += 1; } return BigInteger.One; // No luck at all (This never happens) } static int Main() { BigInteger k = ShorFactor(70191551); Console.WriteLine($"Found q is = {k}"); return 0; } }
http://www.jsqmd.com/news/409815/

相关文章:

  • 2026年比较好的陆运物流/整车陆运专业团队推荐公司 - 品牌宣传支持者
  • 2026年靠谱的济南激光切管机/山东激光切管机精选供应商推荐口碑排行 - 品牌宣传支持者
  • 2026年婚庆主题酒店精选:六家顶尖品牌深度解析 - 2026年企业推荐榜
  • 2026年比较好的板管一体激光切割机生产厂家采购指南帮我推荐几家 - 品牌宣传支持者
  • 2026年合肥高新区产业园出租平台综合评测与优选指南 - 2026年企业推荐榜
  • 2026年值得信赖的五家专业复合肥服务商盘点 - 2026年企业推荐榜
  • 自用--过往项目分析--算是成长把--看看大佬们写的好代码
  • 2026年比较好的激光切管机可靠供应商参考推荐几家 - 品牌宣传支持者
  • 2026年热门的油管内衬设备封口机/油管内衬设备选哪家直销厂家推荐 - 品牌宣传支持者
  • 避坑:stm32L431生成代码缺少HAL_RTCEx_SetWakeUpTimer_IT ()
  • 个人博客网站搭建day5--MyBatis-Plus核心配置与自动填充机制详解(漫画解析)
  • PDF压缩工具:纯前端、开源、高效智能的本地压缩方案(在线demo+实现思路)
  • 2026年驻马店复合肥厂家综合实力深度评估 - 2026年企业推荐榜
  • 2026年初激光笔定制厂家综合评测与选型指南 - 2026年企业推荐榜
  • 2026年热门的油管内衬设备拔管机/油管内衬设备装管机制造厂家实力参考哪家专业 - 品牌宣传支持者
  • 2026年驻马店复合肥商家综合评测与选购指南 - 2026年企业推荐榜
  • 驻马店有机肥服务商盘点:五家实力企业深度解析 - 2026年企业推荐榜
  • 驻马店有机肥服务商盘点:五家实力企业深度解析 - 2026年企业推荐榜
  • Java Web 在线考试系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • 2026年浙江导向标识实力厂家评测与选型指南 - 2026年企业推荐榜
  • 企业级开发精简博客系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • 【CVPR26-李学龙-中国电信】MARIS:具有几何增强和语义对齐的海洋开放词汇实例分割
  • 2026年质量好的热风式油管清洗设备哪家强品牌厂家推荐 - 品牌宣传支持者
  • 2026武汉东湖高新区英语启蒙平台权威评估指南 - 2026年企业推荐榜
  • 2026年猫玩具激光笔核心供应商综合实力评测与选型指南 - 2026年企业推荐榜
  • 救命!100篇文献读不完?我用 Gemini 3 小时搞定了综述初稿
  • 2026年评价高的油管清洗设备/直热式水洗油管清洗设备高评价品牌厂家推荐哪家权威 - 品牌宣传支持者
  • 景观标识实力厂家专业评测:2026年如何选择可靠合作伙伴? - 2026年企业推荐榜
  • 国产AI CRM如何破解B2B企业客户关系管理难题
  • 2026控油蓬松去屑洗发水TOP榜:油头细软塌人群必入爆款洗发好物