大数分解的Shor算法-C#
看代码吧没有太多要说的using System.Numerics; using System.Security.Cryptography; namespace ShorAlgorithm; class Program { /********************************************************************* * shor.cc -- Use Shors Algorithm * to factor a large BigInteger * ChangeLog: * 970225 -- Created by Paul Herman a540paupslc.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序列 //ra^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; } }

相关新闻

避坑:stm32L431生成代码缺少HAL_RTCEx_SetWakeUpTimer_IT ()

避坑:stm32L431生成代码缺少HAL_RTCEx_SetWakeUpTimer_IT ()

STM32CubeMx生成的stm32L431代码缺少HAL_RTCEx_SetWakeUpTimer_IT ().这是怎么回事? 使用STM32CubeMx版本6.5.0生成的代码缺少HAL_RTCEx_SetWakeUpTimer_IT ()的原因? - ST意法半导体 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com) [问答] …

2026/5/17 6:43:35 阅读更多 →
企业级开发精简博客系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

企业级开发精简博客系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

摘要 随着互联网技术的快速发展,信息传播方式发生了深刻变革,博客系统作为个人和企业展示内容的重要平台,其高效管理和用户体验成为关键需求。传统博客系统在性能、扩展性和安全性方面存在不足,难以满足企业级应用的高并发和复杂业…

2026/5/17 6:43:35 阅读更多 →
救命!100篇文献读不完?我用 Gemini 3 小时搞定了综述初稿

救命!100篇文献读不完?我用 Gemini 3 小时搞定了综述初稿

引言: 在学术圈,最让人崩溃的瞬间,不是实验失败,而是导师那句轻飘飘的:“下周交一份文献综述,至少参考 100 篇高质量文献。”看着 Mendeley 里堆积如山的 PDF,看着知网和 Web of Science 上无穷…

2026/5/17 6:43:34 阅读更多 →

最新新闻

深入pytest_collection_modifyitems钩子:定制化测试用例执行与调度

深入pytest_collection_modifyitems钩子:定制化测试用例执行与调度

1. 项目概述如果你在用pytest做自动化测试,尤其是项目规模稍微大一点,或者对测试报告、用例执行顺序有特殊要求时,你大概率会碰到一个绕不开的“神器”——pytest_collection_modifyitems钩子函数。我第一次深入使用它,是因为一个…

2026/7/3 22:17:57 阅读更多 →
DVWA从入门到精通(八):SQL Injection(SQL注入)

DVWA从入门到精通(八):SQL Injection(SQL注入)

摘要:本文是《DVWA从入门到精通》系列的第八篇,带你全面掌握SQL Injection(SQL注入)模块的攻防全流程。从SQL注入的核心原理出发,逐步讲解Low、Medium、High三个级别的攻击手法与源码分析,并深入探讨Imposs…

2026/7/3 22:17:57 阅读更多 →
基于PIC18F4685与KMR221的高精度电压管理系统设计

基于PIC18F4685与KMR221的高精度电压管理系统设计

1. 项目概述:基于KMR221与PIC18F4685的电压管理系统在嵌入式系统设计中,精确的电压管理一直是硬件工程师面临的挑战。传统方案往往需要复杂的分立元件组合,而现代微控制器与专用电源管理芯片的协同工作正在改变这一局面。这次我要分享的&…

2026/7/3 22:15:57 阅读更多 →
【Bug已解决】Anthropic tool_result 找不到对应 tool use id 解决方案

【Bug已解决】Anthropic tool_result 找不到对应 tool use id 解决方案

【Bug已解决】Anthropic tool_result 找不到对应 tool use id 解决方案 1. 问题描述 在自己动手用 Anthropic Messages API 搭建 Agent Harness、实现多轮工具调用循环时,很多人会在某一次请求时遇到这样的 400 错误: {"type": "error&qu…

2026/7/3 22:13:56 阅读更多 →
Linux下fastai第一课完整实操:PyTorch+CUDA+Jupyter环境从零搭建

Linux下fastai第一课完整实操:PyTorch+CUDA+Jupyter环境从零搭建

1. 项目概述:在Linux系统上扎实走完fastai第一课的完整实操路径我带过不少从零开始学深度学习的朋友,发现一个特别普遍的现象:很多人卡在“环境跑不起来”这一步,不是报错就是版本冲突,最后对着Jupyter Notebook里那一…

2026/7/3 22:11:56 阅读更多 →
双检测时代论文修改怎么选?10 款主流降重复降 AIGC 工具分层测评,paperxie 领跑定稿适配赛道

双检测时代论文修改怎么选?10 款主流降重复降 AIGC 工具分层测评,paperxie 领跑定稿适配赛道

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/科研绘图降重复率 - PaperXie智能写作PaperXie免费论文查重检测-首款免费论文检测软件,为毕业生提供专业的论文重复率检测、论文降重、Aigc检测、智能排版 、论文写作等一站式服务。https://www.paperxie.c…

2026/7/3 22:11:56 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻