尤拉專案(python練習)problem 47

2021-06-22 06:23:38 字數 2947 閱讀 4997

這個程式跑的有些久。。。向各位大神求教更好的演算法。。。

# -*- 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...