![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言算法
爱码代码的小松鼠
在密码的海洋里遨游。
展开
-
求解不定方程x^2+y^2=p的整数解
求解不定方程x2+y2=px^2+y^2=px2+y2=p的整数解下方展示的代码实现了任意素数不定方程x2+y2=px^2+y^2=px2+y2=p的求解过程,顾名思义其中ppp是素数,值得一提的是不定方程x2+y2=px^2+y^2=px2+y2=p有整数解当且仅当p=2p=2p=2或p=4k+1p=4k+1p=4k+1。// 求解不定方程x^2+y^2=p.cpp: 定义控制台应用程序的入口点。//#include "stdafx.h"#include"conio.h"#include"s原创 2020-12-17 15:03:41 · 1297 阅读 · 1 评论 -
求任意模素数平方根
求任意模素数平方根下列展示的代码旨在求任意模素数平方根:// x^2=a(modp)求解.cpp: 定义控制台应用程序的入口点。//#include "stdafx.h"#include"conio.h"#include"stdlib.h"#include"string.h"#include"stdlib.h"#include"math.h"static long long* Factor(long long x)//分解p-1.{ int count = 0; long原创 2020-12-16 22:38:52 · 817 阅读 · 0 评论 -
连分数分解大合数
RSA的连分数攻击C语言实现RSARSARSA公钥加密所基于的困难问题是大整数的质因数分解,在本文中我基于连分数分解合数的思想,对RSA的连分数攻击进行了基本的C语言模拟,我尝试利用连分数对一个小合数进行质因数分解,下方给出了我实现的C代码,并添加了必要的注释.// 合数的连分数求解.cpp: 定义控制台应用程序的入口点。//#include "stdafx.h"#include"conio.h"#include"math.h"#include"malloc.h"#include"stri原创 2020-12-05 16:57:47 · 1170 阅读 · 0 评论 -
多项式除法的C语言实现
整系数多项式的基本运算问题的引出在该博客中我将着手解决这样一个问题,在求解模素数ppp的同余式:f(x)=anxn+⋯+a1x+a0≡0(modp)f(x)=a_nx^n+\cdots+a_1x+a_0\equiv0\left(modp\right)f(x)=anxn+⋯+a1x+a0≡0(modp)时,其中ana_nan恒不为零. 通常需要借助费马小定理和多项式的欧几里得除法将上述一个复杂的问题转化为一个次数更低的模素数同余式。具体来说,由费马小定理可知,多项式xp−x(modp)x原创 2020-11-02 23:12:45 · 5125 阅读 · 5 评论 -
模重复平方计算法的C实现
模重复平方计算法(C语言版本)\quadRSARSARSA算法是197819781978年由R.RivestR.RivestR.Rivest、A.ShamirA.ShamirA.Shamir和L.AdlemanL.AdlemanL.Adleman提出的一种用数论构造的、也是迄今为止理论上最为成熟完善的公钥密码密码体制,该体制已得到广泛的应用。算法描述1.密钥的产生(1)选两个保密的大素数ppp和qqq;(2)计算n=p∗qn=p*qn=p∗q,ψ(n)=(p−1)(q−1)\psi(n)=(p-1原创 2020-10-23 00:07:51 · 1907 阅读 · 5 评论 -
C语言递归递归算法之汉罗塔问题的实现
汉罗塔问题的递归实现(C语言版本) 在这个问题中,我们需要将由大到小堆叠的汉罗盘从柱子A借助柱子B转移至柱子C上。在这个过程中,我们需要严格执行“小盘置于大盘之上”这个规则。// 汉罗塔.cpp: 定义控制台应用程序的入口点。//#include "stdafx.h"#include"conio.h"void Move(char a, char b)//函数的功能是将柱子a最顶端的汉罗盘移至柱子b.{ printf("%c->%c\n", a, b);//利用printf(原创 2020-10-21 22:16:40 · 732 阅读 · 0 评论 -
在字符串中提取首个整数并区分正负
在字符串中提取首个整数并区分正负// 字符串转数值.cpp: 定义控制台应用程序的入口点。//#include "stdafx.h"#include"conio.h"int convert(char* arr){ int i, j, k; int m = 0;//用于记录数字的真实位数 int n = 0;//用于记录需要输出的数字从字符串的第几位开始记录位数 int F = 0; int A, count = 0, B = 0; while (arr[count] != '\0原创 2020-10-19 11:59:56 · 1757 阅读 · 8 评论