博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
欧拉计划第三题
阅读量:5235 次
发布时间:2019-06-14

本文共 1144 字,大约阅读时间需要 3 分钟。

标签(空格分隔): Euler 博客


Largest prime factor

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其中最大的是29,求600851475143的最大质因数。

第一反应是求600851475143的所有因数,然后找出里面最大的质数。

ans = []n = 600851475143max = int(n**0.5)for x in range(2, max):    if n%x == 0:        ans.append(x)print(ans)ans = [71, 839, 1471, 6857, 59569, 104441, 486847]

找因数没有什么加速的技巧,而且上面的程序本来就运行很快,但判断一个数是不是质数却有一些加速的技巧,常见的有筛素数法

筛素数

因为素数的倍数一定不是素数,所以我们在找到一个素数时可以将它的倍数排除,比如求100以内的素数:

n = 100L = list(range(2, n))ans = set()while L:    x = L.pop(0)    ans.add(x)    i = 2    while i*x < n:        if i*x in L:            L.remove(i*x)        i += 1print(ans)ans = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97}

基于这种思想,我们可以在找600851475143的因数时就将合数筛去,

ans = []n = 600851475143iter_max = int(n ** 0.5)for num in range(2,iter_max):    if n%num == 0:        ans.append(num)        n/=num        while n%num == 0:            n/=num # 保证n已被num除尽,此时n不会再有num*i的因数print(ans)ans = [71, 839, 1471, 6857]

最后结果是6857

转载于:https://www.cnblogs.com/lepeCoder/p/10991575.html

你可能感兴趣的文章
Java hashCode() 方法深入理解 ...
查看>>
Modbus TCP 示例报文
查看>>
spring的annotation
查看>>
go 学习笔记(4) ---项目结构
查看>>
如何解决ORA-01033问题(转)
查看>>
分割线细线
查看>>
java 中的一些运算符问题
查看>>
c# 操作ftp
查看>>
css切换--使用cookie
查看>>
C#运算符之异或运算
查看>>
C语言与C++ <string.h> memchr出现的问题
查看>>
java中静态代码块的用法 static用法详解
查看>>
用于代码检查的错误列表
查看>>
Java线程面试题
查看>>
C#2.0 读word的多个表格到DataGridView或是其它控件 XP Vista
查看>>
sql script: Graphs, Trees, Hierarchies and Recursive Queries
查看>>
Paper Reading: Relation Networks for Object Detection
查看>>
Android中点中overlay弹出带尾巴的气泡的实现
查看>>
Mybatis接口中传递多个参数
查看>>
Dreamweaver层使用八定律
查看>>