這個程式跑的有些久。。。向各位大神求教更好的演算法。。。
# -*- coding:utf8 -*-
import sys
import decide_whether_prime
#題目設定
'''最小的兩個具有兩個不同質數因子的連續整數是:
14 = 2 × 7
15 = 3 × 5
最小的三個具有三個不同質數因子的連續整數是:
644 = 2² × 7 × 23
645 = 3 × 5 × 43
646 = 2 × 17 × 19.
找出最小的四個具有四個不同質數因子的整數。它們之中的第乙個是多少?'''
#解題思路:從1000起開始逐個判斷,計算出連續的四個數字,找到它們的因子列表,求出不同因子的個數,如果對於一組連續的四個數字,每個數字的因子列表的不同因子個數為4
# 且每個因子均為質數,那麼滿足條件,返回這組數字中的第乙個數字即可
class differentfactorsconsecutivenumbers(): #定義乙個類,尋找連續的含有不同質因子的數字
def __init__(self):
pass
def create_factors_list(self , number): #定義了乙個方法,建立乙個給定數字的因子列表(相同因子不合併),引數為給定數字,返回因子列表
factors_list =
factor = 2
while(number != 1):
if number % factor != 0:
factor = factor + 1
else :
number = number / factor
return factors_list
def count_factors_number(self , number): #定義了乙個方法,計算乙個數字的不同因子的個數,引數為給定數字,返回不同因子個數
factors_list = self.create_factors_list(number)
factors_number = len(list(set(factors_list)))
return factors_number
def judge_whether_prime_factors(self , number): #定義了乙個方法,判斷乙個數字的因子是否全部為質數,引數為給定數字,如果全部為質數,返回1
factors_list = self.create_factors_list(number)
all_is_prime_factor = 1
for factor in factors_list:
if decide_whether_prime.decide_whether_prime(factor) == 0:
all_is_prime_factors = 0
break
return all_is_prime_factor
def find_first_number(self): #主方法,尋找滿足條件的四個連續數字中的第乙個,返回第乙個數字
first_number = 1000
while(true):
is_required_number = 0
second_number = first_number + 1
third_number = first_number + 2
forth_number = first_number + 3
if self.count_factors_number(first_number) == 4 and self.count_factors_number(second_number) == 4 and \
self.count_factors_number(third_number) == 4 and self.count_factors_number(forth_number) == 4:
if self.judge_whether_prime_factors(first_number) == 1 and self.judge_whether_prime_factors(second_number) == 1 and \
self.judge_whether_prime_factors(third_number) == 1 and self.judge_whether_prime_factors(forth_number) == 1 :
is_required_number = 1
if is_required_number == 1:
print self.create_factors_list(first_number),self.create_factors_list(second_number), \
self.create_factors_list(third_number),self.create_factors_list(forth_number)
return first_number
first_number = first_number + 1
if __name__ == "__main__":
different_factors_consecutive_numbers = differentfactorsconsecutivenumbers()
print different_factors_consecutive_numbers.find_first_number()
decide_whether_prime**已在46題列出。。。
執行結果: 134043
尤拉路 尤拉迴路 概念及其練習
尤拉路 如果給定無孤立結點圖g,若存在一條路,經過圖中每邊一次且僅一次,這條路稱為尤拉路 如果給定無孤立結點圖g,若存在一條迴路,經過圖中每邊一次且僅一次,那麼該迴路稱為尤拉迴路。存在尤拉迴路的圖,稱為尤拉圖。一 對於無向圖g,具有一條尤拉路,當且僅當g是連通的,且有零個或兩個奇數度結點。且有零個奇...
尤拉專案第五題
題目 2520是最小的能被1 10中每個數字整除的正整數。最小的能被1 20中每個數整除的正整數是多少?分析 題目的實質是求幾個數的最小公倍數。任何乙個正整數都可以表示成幾個素數的次方的乘積 假設p n pn pn表示第n個素數,那麼任意正整數可以通過下面的式子獲得 nu m p1 k1p2 k2p...
尤拉專案010 2000000以內的素數和
summation of primes the sum of the primes below 10 is 2 3 5 7 17.find the sum of all the primes below two million.還是使用sieve of eratosthenes 演算法 我的pyth...