欧拉计划(3)Largest prime factord

【题目】
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
【翻译】
13195的质数因子有5,7,13和29.

600851475143的最大质数因子是多少?

【思路】求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止。

【代码】

void test3()
{

	int isprime, mod;
	long double num = 600851475143, i, j;

	for (i = 3; i < num / 2; i += 2)
	{
		isprime = 1;
		mod = (int)fmod(num, i);
		if (mod == 0)
		{
			mod = (int)fmod(i, 2);
			if (mod == 1)
			{

				isprime = 0;
				for (j = 3; j < sqrt(i); j += 2)
				{
					mod = (int)fmod(i, j);
					if (mod == 0)
					{
						isprime = 1;
						break;
					}
				}
			}

			if (isprime == 0)
			{
				num /= i;
			}
		}
	}
	printf("result: %d\n\n",(int) num);
}
【说明】

用到了库函数fmod函数,以下为该函数的说明:
原型:float fmod(float x, float y);
用法:#include <math.h>
功能:计算x/y的余数
说明:返回x-n*y,符号同y。n=[x/y](向离开零的方向取整
【思路】Pollard Rho快速因数分解。

上图中,外部循环用于求唯一因数,内部循环用于求该因数的多个副本。
【优化】由于该问题不需要求出每一个质因数,故此处不需要内部循环,另外
600851475143为一个很大的奇数,所以初始是a的值可以从3开始,并且偶数均不可能为其因子,故步长可优化为a+=2;

【代码】

void test3()
{

	long long int num=600851475143;
	long long int i=3;
	while(i<num)
	{
		if(num%i==0)
			num/=i;
		else
			i+=2;
	}
	cout<<num<<endl;
}


【答案】运行程序后,可以得到结果为 6857.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵卓不凡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值