1、10以下的自然数中,属于3或5的倍数的数字有3,5,6,9,它们之和为23找出1000以下的自然数中,属于3或5倍数的所有数字之和。

"""
欧拉计划
10以下的自然数中,属于3或5的倍数的数字有3,5,6,9,它们之和为23
找出1000以下的自然数中,属于3或5倍数的所有数字之和
"""
def exactNum(m,n,num):
    if num%m==0 or num%n==0:
        return True
    else:
        return False
sum=0
for i in range(1,1000):
    if exactNum(3,5,i):
        sum=sum+i
print("1000以内整数中属于3或5倍数的所有数字之和为:"+str(sum))

2、找出斐波那契数列中数值不超过400万的项,求这些项中为偶数的项之和

"""
欧拉计划
找出斐波那契数列中数值不超过400万的项,求这些项中为偶数的项之和
"""
fibo=[1,2]
sum=2
a=0
while a<4000000:
    lenf=len(fibo)
    a=fibo[lenf-1]+fibo[lenf-2]
    fibo.append(a)
    if a%2==0:
        sum=sum+a
print("求和结果为:"+str(sum))

3、找出一个合数的最大质因数,如13195的质因数包括:5,7,13和29,29是其最大质因数。请找出600851475143的最大质因数。

import time
import math
def isPrime(n):
    if n<2:
        return False
    elif n==2:
        return True
    else:
        m=int(math.sqrt(n))
        for i in range(2,m+1):
            if n%i==0:
                return False
        return True

"""
思路:
从小到大逐数判断是否为因数,再判断该因数是否为质数,加入质因数列表
再判断该因数对应的因数是否为质数,如是,加入质因数列表
"""
def findMaxpn(n):
    list=[]
    m=int(math.sqrt(n))
    for i in range(2,m+1):
        if n%i==0:
            if isPrime(i):
                list.append(i)
            if isPrime(n/i):
                list.append(n/i)
    if list:
        list.sort()
        print(list)
        return list[-1]
    else:
        print("参数为质数,不符合条件!!")
        return 0

start1=time.clock()

print(findMaxpn(600851475143))

end1=time.clock()
print("方法一耗时"+str(end1-start1)+"s")

运行结果:
[71, 839, 1471, 6857]
6857
方法一耗时0.2167969211667917s

4、一个回文数是指从左向右和从右向左都一样的数字。最大的由两个两位数乘积构成的回文数9009=91*99;找出最大的由两个三位数乘积构成的回文数。

import copy
import time

start=time.clock()
#先定义一个判断回文数的函数
def isPalindrome(n):
    m=n
    list=[]
    #把n的各位倒序插入列表
    while m!=0:
        list.append(m%10)
        m=int(m/10)
    #下一句不能简单的用listx=list代替
    #这样无法真正生成一个新列表赋给listx,而是把list的引用赋给了listx
    #如果修改list或者修改listx,其实都是修改的引用指向的内容
    #会同时影响listx和list
    listx=copy.deepcopy(list)
    list.reverse()
    if list==listx:
        return True
    else:
        return False

list=[]
for i in range(100,1000):
    for j in range(i,1000):
        s=i*j
        if isPalindrome(s):
            list.append(s)
print(list)
list.sort()
print(list[-1])
end=time.clock()
print("总耗时:"+str(end-start)+"seconds")

5、找出能被1到20之间各个数整除的正整数

#找出能被1到20之间各个数整除的正整数
import math
import time

start=time.clock()
def isPrime(n):
    if n<2:
        return False
    elif n==2:
        return True
    else:
        s=int(math.sqrt(n))
        for i in range(2,s+1):
            if n%i==0:
                return False
        return True

def findMax(n):
    #找出1~n之间的各个质数,并求其乘积
    s=1
    for i in range(2,n+1):
        if isPrime(i):
            s=s*i
    lista=list(range(2,n+1))
    m=s
    #最终结果必定为前面质因数乘积的倍数
    #遍历列表,遇见不能整除的则加一次质数乘积
    #再重新遍历,直到都可以整除
    while True:
        a=1
        for x in lista:
            if m%x!=0: #不能整除,须加一次再进入到下次循环重新遍历
                a=0
                break
        if a==1:
            break
        m=m+s
    return m

print(findMax(20))
end=time.clock()
print("共耗时:"+str(end-start)+"秒!")