逆推因子分解法是一种我自己设计实现的全新因子分解方法,它不同于以往任何的大数因子分解法,它利用递归和乘法表的原理,通过判断N值的最后一位,来反向推出它的两个因子,其本质就是试乘法的实现,对于一些较小的数其效率高于试除法,但当N值很大时其效率并不高,但是可以做为一种全新的因子分解方法学习。下面是该算法的具体实现,代码部分只可以分解PQ值相等的因子,如果有需要分解很大的数,你可能需要采用GMP库重新实现一遍即可。
/*
大数分解末尾倒推法
末尾倒推法是一个典型的平衡二叉树结构
素数除了2、5,都是以1、3、7、9做为最后一位。
1 * 1 = 1; 1 * 3 = 3; 1 * 7 = 7; 1 * 9 = 9;
3 * 3 = 9; 3 * 7 = 21; 3 * 9 = 27;
7 * 7 = 49; 7 * 9 = 63;
9 * 9 = 81;
1、9是三叉树,3、7是二叉树。
二叉树对应关系是 1*3=3、7*9=63 和 1*7=7、3*9=27。
三叉树对应关系是 1*1=1、3*7=21、9*9=81 和 1*9=9、3*3=9、7*7=49。
所以根据N值最后一位就可以判断PQ的最后一位是什么。
程序设计:赵良军
2021.12.21
*/
/*
字符串最后一个字节总是'\0',所以计算位数的时候要从后往前计算。
RSA一个2048位的平方根是308个字节,p和q一般大小一致,也有pq距离很远的情况。
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
unsigned char* g = NULL;
unsigned int depth = 5; //需要递归的字节数包括'\0',5表示寻找千位数。
unsigned char str[4096] = {'\0'};
//将整形转换为字符串,支持2-36进制。
char* itoa(int value, char str[], int radix)
{

最低0.47元/天 解锁文章
4511

被折叠的 条评论
为什么被折叠?



