文档章节

Project Euler个人答案:2~8

fzyz_sb
 fzyz_sb
发布于 2015/02/27 22:19
字数 840
阅读 40
收藏 0
点赞 0
评论 0

1:

2:

>>> def fib(n):
	result = []
	a, b = 1, 2
	while a < n:
		result.append(a)
		a, b = b, a + b
	return result

>>> sum(filter(lambda x: x % 2 == 0, fib(4000000)))
4613732
3:

def Prime(n):
    primeArr = [2, 3]
    result = -1
    if n == 2 or n == 3:
        return n
    if n < 2:
        return result
    #递归1~n的每一个元素,判断是否为素数
    x = 4
    while x < n:
        if primeArr[-1] > (x // 2):
            divArr = filter(lambda y: y <= (x // 2), primeArr)
        else:
            divArr = primeArr + range(1, x)[primeArr[-1]:(x // 2)]
        #print divArr
        for y in divArr:
            if x % y == 0:
                break
        else:
            primeArr.append(x)
            result = x
        x += 1
    return result

def PrimeFactor(n):
    #存储因素分解
    result = []
    #存储素数
    primeArr = [2]

    while n != 1:
        x = primeArr[-1]
        if n % x == 0:
            result.append(x)
            print result
            n = n // x
        else:
            #说明最大的素数已经被分解,寻求更大的素数
            while True:
                x += 1
                for y in primeArr:
                    if x % y == 0:
                        break
                else:
                    primeArr.append(x)
                    break
    return result[-1]
4:

def isPalindrome(num):
    """判断数字是否为回文数字"""
    s = str(num)
    rs = s[::-1]
    return s == rs

def PrimeFactor(n):
    #存储因素分解
    result = []
    #存储素数
    primeArr = [2]

    while n != 1:
        x = primeArr[-1]
        if n % x == 0:
            result.append(x)
            n = n // x
        else:
            #说明最大的素数已经被分解,寻求更大的素数
            while True:
                x += 1
                for y in primeArr:
                    if x % y == 0:
                        break
                else:
                    primeArr.append(x)
                    break
    return result

def proByTwoNum(result, num):
    twoFactor = []
    if result[-1] > num:
        return []
    x = num - 1
    while True:
        y = x
        for f in result:
            if y % f == 0:
                y = y // f
        if y != 1:
            x = x - 1
        else:
            twoFactor = [x, reduce(lambda x, y: x * y, result) // x]
            break
    for f in twoFactor:
        if f >= num:
            return []
    return twoFactor
    
def largestPalindrome(num):
    """找到最大的回文数字"""
    proNum = num * num
    while proNum:
        proNum -= 1
        #如果为回文数字,则进行因素分解
        if isPalindrome(proNum):
            result = PrimeFactor(proNum)
            #如果因素分解的结果可以成为两个小于num的数的乘积,则proNum为最大的回文数字
            twoFactor = proByTwoNum(result, num)
            if len(twoFactor) == 2:
                return proNum
5:

def PrimeFactor(n):
    #存储因素分解
    result = []
    #存储素数
    primeArr = [2]

    while n != 1:
        x = primeArr[-1]
        if n % x == 0:
            result.append(x)
            n = n // x
        else:
            #说明最大的素数已经被分解,寻求更大的素数
            while True:
                x += 1
                for y in primeArr:
                    if x % y == 0:
                        break
                else:
                    primeArr.append(x)
                    break
    return result

def listToDict(result):
    """将列表转换为字典:键为数值,值为出现的次数:[1, 2, 3, 2, 3]-->{1:1,2:2,3:2}"""
    d = {}
    for n in result:
        if n in d:
            d[n] += 1
        else:
            d[n] = 1
    return d

def multiple(num):
    """生成可被1~num所有数整除的最小整数"""
    result = 1
    #字典d用于存储最大的因数分解
    TotalDict = {}
    for x in range(2, num + 1):
        d = listToDict(PrimeFactor(x))
        for key in d:
            if key in TotalDict:
                if d[key] > TotalDict[key]:
                    TotalDict[key] = d[key]
            else:
                TotalDict[key] = d[key]
    print TotalDict
    for key in TotalDict:
        result *= pow(key, TotalDict[key])
    return result
6:

def SumSquareDifference(n):
    return pow(sum(range(1, n + 1)), 2) - sum([x * x for x in range(1, n + 1)])
7:

def Prime(n):
    primeArr = [2, 3]
    result = -1
    if n == 2 or n == 3:
        return n
    if n < 2:
        return result
    #递归1~n的每一个元素,判断是否为素数
    x = 4
    while x < n:
        if primeArr[-1] > (x // 2):
            divArr = filter(lambda y: y <= (x // 2), primeArr)
        else:
            divArr = primeArr + range(1, x)[primeArr[-1]:(x // 2)]
        #print divArr
        for y in divArr:
            if x % y == 0:
                break
        else:
            primeArr.append(x)
            result = x
        x += 1
    return result

def isPrime(n):
    """判断其是否为素数"""
    primeArr = [2, 3]
    if n == 2 or n == 3:
        return True
    x = 2
    while x <= n // 2:
        if n % x == 0:
            return False
        x += 1
    return True 

def PrimeIndex(index):
    primeNum = 1
    while index > 0:
        primeNum += 1
        if isPrime(primeNum):
            index -= 1
    return primeNum
8:

s = """7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"""
def proByNums(count):
    result = 1
    index = 0
    length = len(s)
    while index < length - count + 1:
        sub = s[index:index + count]
        sumForSub = reduce(lambda x, y: x * y, map(int, sub))
        if sumForSub > result:
            result = sumForSub
        index += 1
    return result





© 著作权归作者所有

共有 人打赏支持
fzyz_sb
粉丝 404
博文 209
码字总数 447144
作品 0
武汉
程序员
纸笔的力量(2011-01-01)

对 Mathematica 着迷了,虽然我知道这热情不会持续多久。还是喜欢在解决问题中学习,这次是 Project Euler 的第 38 问。 提问:一个数依次×1,×2,……把所得连接成一个 9 位数,如果这个 ...

Pope怯懦懦地 ⋅ 2017/12/09 ⋅ 0

18 个锻炼编程技能的网站

本文由伯乐在线 -Reset 翻译。未经许可,禁止转载! 英文出处:codecondo。欢迎加入翻译组。 编程几乎已经成为了人类所知每个行业的必要组成部分,它帮助组织和维护大型系统的方式是无可比拟...

伯乐在线 ⋅ 2016/08/03 ⋅ 0

Bad Coder(2011-01-04)

再优美的语言,如果你真的把它当作草稿来用,也还真是可以写出一些自惭形秽的-_-! 依然以奋斗在 Project Euler 界的我为例(这次的热情貌似久了一点)。 Problem 27 我们拿到的只是坐标,并非...

Pope怯懦懦地 ⋅ 2017/12/09 ⋅ 0

51nod 1024 矩阵中不重复的元素

1024 矩阵中不重复的元素 Project Euler 难度:2级算法题 收藏 关注 一个m*n的矩阵。 该矩阵的第一列是a^b,(a+1)^b,.....(a + n - 1)^b 第二列是a^(b+1),(a+1)^(b+1),.....(a + n - 1)^(b+1...

Fire_to_cheat_ ⋅ 02/23 ⋅ 0

欧拉函数(Euler Function)

Cover 欧拉函数 在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)。此函数以其首名研究者欧拉命名(Euler'so totient function),它又称为Euler's totient function、...

SpiffyEight77 ⋅ 2017/07/25 ⋅ 0

欧拉计划里一道经典算法题

题目是这样的(pj euler 76): 任意一个数字,例如5,可以写成 5=1+1+1+1+1 5=1+1+1+2 5=1+1+3 5=1+4 5=1+2+2 5=2+3 一共是六种写法(不重复),那么100又多少种写法? 此题不同于高中的排列...

psaux0 ⋅ 2014/04/01 ⋅ 2

实战 Mathematica (2010-12-31)

最近迷上 Mathematica 了。我曾看过(也仅仅是瞟了几眼)Haskell、Scheme,但真正让我感受到函数式编程魅力的,却是这个或许都称不上是语言的 Mathematica 。我喜欢边学边用的那种满足感,让...

Pope怯懦懦地 ⋅ 2017/12/11 ⋅ 0

Python3 欧拉计划 问题1-5

欧拉计划(Project Euler)是一个解题网站,包括一系列有挑战性的数学与计算机编程题;要解开它们,需要的不止是数学知识:尽管数学能够帮助你找到一些优雅而有效的方法,大多数题目仍需要借...

AiFan ⋅ 2017/11/06 ⋅ 0

从 Project Euler 中我们学到了什么?(2010-12-26)

最近做 Project Euler 的第41问时学到了不少东西,数论、Mathematica⋯⋯ 题目是这样的: 如果一个 n 位数的各位数字中恰好 1 到 n 各出现了一次,那么就说这个数 pandigital 。比如,2143 ...

Pope怯懦懦地 ⋅ 2017/12/11 ⋅ 0

2017 年最受欢迎的 10 个编程挑战网站

如果你正在在学习编程,那么我可以告诉你一个提高技能的好方法,那就是是敢于去解决编码过程中遇到的难题。解决不同类型的难题,可以帮助你成为一名优秀的问题解决者;不管编程语言多复杂,你...

作者: Daniel Borowski ⋅ 2017/10/31 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java NIO之字符集

1 字符集和编解码的概念 首先,解释一下什么是字符集。顾名思义,就是字符的集合。它的初衷是把现实世界的符号映射为计算机可以理解的字节。比如我创造一个字符集,叫做sex字符集,就包含两个...

士别三日 ⋅ 32分钟前 ⋅ 0

Spring Bean基础

1、Bean之间引用 <!--如果Bean配置在同一个XML文件中,使用local引用--><ref bean="someBean"/><!--如果Bean配置在不同的XML文件中,使用ref引用--><ref local="someBean"/> 其实两种......

霍淇滨 ⋅ 38分钟前 ⋅ 0

05、基于Consul+Upsync+Nginx实现动态负载均衡

1、Consul环境搭建 下载consul_0.7.5_linux_amd64.zip到/usr/local/src目录 cd /usr/local/srcwget https://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_linux_amd64.zip 解压consu......

北岩 ⋅ 41分钟前 ⋅ 0

Webpack 4 api 了解与使用

webpack 最近升级到了 v4.5+版 01 官方不再支持 node4 以下版本 官方不再支持 node4 以下版本官方不再支持 node4 以下的版本,所以如果你的node版本太低,先开始升级node吧!话说node10 ...

NDweb ⋅ 50分钟前 ⋅ 0

使用nodeJs安装Vue-cli

Vue脚手架就是一个Vue框架开发环境 脚手架的意思是帮你快速开始一个vue的项目,也就是给你一套vue的结构,包含基础的依赖库,只需要 npm install就可以安装,让我们不需要为了编辑或者一些其...

木筏笔歆 ⋅ 今天 ⋅ 0

【微信小程序开发实战】0x00.开发前准备工作

写在开始 本人资深后端码农一枚,近期项目需求,接触到了微信小程序,将学习过程整理成文分享给小伙伴们,由于是边学边整理难免有表述不对的地方,望大家及时指正,感谢。 本人微信号: dream...

dreamans ⋅ 今天 ⋅ 0

linux redis的安装和php7下安装redis扩展

安装redis服务器 (1)下载安装包: $ wget http://download.redis.io/releases/redis-2.8.17.tar.gz (2)编译程序: $ tar xzf redis-2.8.17.tar.gz $ cd redis-2.8.17 $ make $ cd src &&......

concat ⋅ 今天 ⋅ 0

Guava EventBus源码解析

一、EventBus使用场景示例 Guava EventBus是事件发布/订阅框架,采用观察者模式,通过解耦发布者和订阅者简化事件(消息)的传递。这有点像简化版的MQ,除去了Broker,由EventBus托管了订阅&...

SaintTinyBoy ⋅ 今天 ⋅ 0

http怎么做自动跳转https

Apache 版本 如果需要整站跳转,则在网站的配置文件的<Directory>标签内,键入以下内容: RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^(.*)?$ https://%{SERVER_NAME......

Helios51 ⋅ 今天 ⋅ 0

Python爬虫,抓取淘宝商品评论内容

作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫! 思路 我们就拿“德州扒鸡”...

python玩家 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部