Problem 3 Largest prime factor

The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?

问题 3 最大质因数

13195 的质因数是 5、7、13 和 29。
数字 600851475143 的最大质因数是多少?

思路分析

首先要理解清楚质因数的概念

质因数,在数论中是指能整除给定正整数的质数。除了1以外,两个没有其他共同质因子的正整数称为互质。因为1没有质因子,1与任何正整数(包括1本身)都是互质
正整数的因数分解可将正整数表示为一连串的质因子相乘,质因子如重复可以用指数表示。根据算术基本定理,任何正整数皆有独一无二的质因子分解式。只有一个质因子的正整数为质数
如果一个质数是某个数的因数,那么就说这个质数是这个数的质因数,并且这个因数一定是一个质数

每个合数都可以写成几个质数相乘的形式,这几个质数均称为该合数的质因数

例如:6 的质因子是 2 和 3(6 = 2 × 3);10 的质因子是 2 和 5(10 = 2 × 5)

求解质因数的方法中,比较常见的事短除法,它的具体求解步骤是

  1. N/2 (N为任意大于 2 的自然数),得到商
  2. 步骤一的商继续除以 2,直到商不能被 2 整除
  3. 被除数加一,比较平方数是否小于被除数(若小于,则所得商继续除以 3,不能整除,则除以 5)
  4. 分层循环,当除数的平方大于等于被除数时退出循环,此时 N 为最大质因数。一层判断除数的平方是否小于被除数,另一层判断被除数是否可以整除除数

代码实现

整体思路并没有问题,但是由于题目中给定数值已经超过了一般的执行范围,总是报错 stackoverflow,并未计算到最终结果,或许可以考虑用一台性能更好的机器测试下

该 C++ 版本代码编译速度很快,供参考

#include <stdio.h>
#include <math.h>
#include <limits>using namespace std;typedef int      INT;
typedef char    CHAR;
typedef void    VOID;
typedef double  DOUBLE;#define PRINT    printf
#define DPRINT  printfDOUBLE MaxPrimeFactor(DOUBLE n)
{DOUBLE i;DOUBLE tem;DOUBLE max;if(n - 1.99999999999999 < numeric_limits<DOUBLE>::epsilon())return -1.0;max = n;tem = n / 2.0;while(fabs(tem - (floor(tem))) < numeric_limits<DOUBLE>::epsilon()){DPRINT("prime factor is:%lf\n", 2.0);n = tem;tem = n / 2.0;}if(fabs(n-1.0) < numeric_limits<DOUBLE>::epsilon())return 2.0;for(i=3.0; i<=max; i+=2.0){if(fabs(n-i) < numeric_limits<DOUBLE>::epsilon()){DPRINT("prime factor is:%lf\n", i);return i;}tem = n / i;while(fabs(tem - (floor(tem)) < numeric_limits<DOUBLE>::epsilon())){DPRINT("prime factor is:%lf\n", i);n = tem;tem = n / i;}if(fabs(n-1.0) < numeric_limits<DOUBLE>::epsilon())return i;}return -1.0;
}INT main(INT argc, CHAR *argv[])
{while(1){PRINT("input num:\n");DOUBLE n;scanf("%lf", &n);if(n < 0)break;DOUBLE res = MaxPrimeFactor(n);PRINT("The largest prime factor is:%lf\n", res);}return 0;
}

答案:6857


参考资料:

  • Find the largest prime factor of a composite number

【欧拉计划第 3 题】最大质因数 Largest prime factor相关推荐

  1. 【欧拉计划第 5 题】最小公倍数 Smallest multiple

    Problem 5 Smallest multiple 2520 is the smallest number that can be divided by each of the numbers f ...

  2. 【欧拉计划第 13 题】 大数之和 Large sum

    Problem 13 Large sum Work out the first ten digits of the sum of the following one-hundred 505050-di ...

  3. 欧拉计划 第5题 Smallest multiple

    问题 2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any r ...

  4. 详解欧拉计划第395题:毕达哥拉斯树

    本题难度系数为40%(最易5%,最难100%). 毕达哥拉斯树是按如下步骤生成的分形图形: 从一个单位正方形开始,以其中一条边为基底(在图示中,单位正方形下放的边作为基底),给基底所对的边粘连上一个三 ...

  5. 欧拉计划(project euler)最详细中文题解

    欧拉计划是一个在线解题网站,题目以各类数学问题为主,通常需要结合一定的数学与编程知识,写出适当的程序求解问题(详细介绍可以参见我的文章).相比于力扣等刷题网站,欧拉计划上的题目有着更丰富的知识背景,在 ...

  6. 欧拉计划:第53题 Combinatoric selections

    欧拉计划:第53题 Combinatoric selections 无意中知道有这个用编程解决数学题的网站,个人对数学又比较感兴趣,所以打算做个欧拉计划系列,将自己的一些见解分享给大家,第一次写文章, ...

  7. 欧拉计划(鱼C论坛)@20161107

    1.10以下的自然数中,属于3或5的倍数的数字有3,5,6,9,它们之和为23找出1000以下的自然数中,属于3或5倍数的所有数字之和. """ 欧拉计划 10以下的自然 ...

  8. 欧拉计划 P429 (数论)

    欧拉计划 P429 Sum of squares of unitary divisors(数论) 传送门:https://projecteuler.net/problem=429 题目大意: 定义一个 ...

  9. 欧拉计划 Project Euler 50-56

    Project Euler 50-56 Project Euler: https://projecteuler.net/ Project Euler | 欧拉计划: https://pe-cn.git ...

  10. python求直角三角形个数的公式_Python3 欧拉计划 问题71-75

    EulerProject.png 问题66-70参见:https://www.jianshu.com/p/d0fad6213433 71.有序分数 考虑形如n/d的分数,其中n和d均为正整数.如果n ...

最新文章

  1. 百度 和 AI教父Hinton 的故事
  2. 【ASP.NET MVC 学习笔记】- 07 使用 Entity Framework
  3. jmeter之图片上传
  4. 1708硬盘转接口_ICY DOCK全球首款U.2转USB转接器震撼上市
  5. optional转化为set_JDK8新特性--学习笔记(OptionalCollectors)
  6. 大数据_Flink_数据处理_资源的分配和并行度测试---Flink工作笔记0013
  7. CSS:display和visibility隐藏的区别
  8. red hat linux 7.1 使用手册!,linux入门教材(Red Hat Linux 7.1)
  9. Python图像处理丨认识图像锐化和边缘提取的4个算子
  10. 【愚公系列】2022年10月 微信小程序-电商项目-商品详情页面说明和商品导航
  11. IP地址最后一位斜杠是什么意思?比如192.168.1.10/27?还有IP地址和子网掩码相加得到的网络地址是什么意思
  12. systemverilog:always_comb、always_latch、always_ff区别
  13. Java中Files工具类的使用
  14. oracle11g ora12170,11g告警日志中大量ORA-12170错误
  15. ps大图缩小让小图更清晰
  16. 1514_人月神话阅读笔记_20年后的人月神话_上篇
  17. springboot调整请求头大小_SpringBoot http post请求数据大小设置操作
  18. 基于安卓的 gps定位系统的跑步健身助手
  19. 谷粒商城--后端笔记(混乱)
  20. 求用户最大连续登陆天数mysql实现

热门文章

  1. 板载天线设计相关资料
  2. L Norms 范数
  3. android banner无限轮播,LoopBanner - 可以自动轮播的无限循环banner
  4. 尚硅谷nodejs入门教程_笔记
  5. 持刀男子也地级市小女子背景
  6. 小萌谈Art(3)——离线编程篇
  7. 没有了耳机接口,怎么让手机同时支持充电、听歌?USB-C音频方案了解一下
  8. Unable to find instance for XXXX
  9. 时间序列分析相关概念
  10. Gene Pattern