逆推因子分解法——C语言实现

    逆推因子分解法是一种我自己设计实现的全新因子分解方法,它不同于以往任何的大数因子分解法,它利用递归和乘法表的原理,通过判断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)
{
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值