John M. Pollard快速分解质因数法

介绍了1975年John M. Pollard提出的算法,该算法基于短除法思想,用于高效分解质因数,并提供了C语言实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1975年,John M. Pollard提出了一种新的算法,算法时间复杂度为O(n^1/4)。
求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止。分解质因数的算式的叫 短除法,和除法的性质差不多,还可以用来求多个个数的公因式:

  如24 
  2┖24(是短除法的符号) 
  2┖12 
  2┖6 
  3——3是质数,结束 
  得出24=2×2×2×3=2^3×3(m^n=m的n次方) 
  再如105 
  3┖105 
  5┖35 
  ----7——7是质数,结束 
  得出105=3×5×7

John M. Pollard算法思想就是短除法用的思想。

#include<stdio.h>
int main()
{
	int num = 24;//需要分解的数,根据数的大小选择类型
	int i = 2;
	for(i=2; i<=num/2; i++)
	{
		while(num >= i)
		{
			if(num % i == 0)//能被整除
			{
				printf("%d * ", i);//输出
				num /= i;//模仿短除法
			}
			else
				break;
		}
	}
	printf("%d\n", num);
return 0;}
输出:2 * 2 * 2 * 3

基本思想如上所述,具体程序需要自己改代码,比如选择数据类型,可能是long long类型,最后输出也要控制,比如num为8的时候会输出2 * 2 * 2 * 1,所以最后还得对num进行判断,如果是1则不要输出了

最后比较完整的程序:

#include<stdio.h>
int main()
{
	long long num;
	printf("please input a number:");
	scanf("%lld", &num);
	int i = 2;
	printf("%lld = ", num);
	for(i=2; i<=num/2; i++)
	{
		while(num >= i)
		{
			if(num % i == 0)//能被整除
			{
				if(num / i == 1)
					printf("%d\n", i);
				else
					printf("%d * ", i);
				num /= i;//模仿短除法
			}
			else
				break;
		}
		
	}
	if(num != 1)
		printf("%lld\n", num);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值