python實現整數分解為質數的演算法

2021-07-27 21:16:00 字數 1309 閱讀 1587

之前面試碰到過一道題,要求將整數分解為質數,用c實現看上去較為繁瑣,最近學習python,拿這道題練練手,相對於c而言,**非常簡潔。

廢話不多說,先上原始碼。

import time

def isnotin(meta , list):

for ec in list:

if meta==ec:

return false

return true

def getas(numlist,primelist,remander,cycleminpri):

m=0for ec in primelist:

if ec < cycleminpri:

continue

if remander%ec == 0 and remander != ec:

primelist=getas(numlist,primelist,int(remander/ec),ec)

return primelist

if isnotin(remander,primelist):

else:

return primelist

primelist=

for each_item in range(3,10000):

numlist=

primelist=getas(numlist,primelist,each_item,1)

if numlist:

str = "%d%s" % (each_item, " = ")

for ec in range(0,len(numlist)-1):

str="%s%d%s"%(str,numlist[ec],' x ')

str="%s%d"%(str,numlist[-1])

else:

str="%d%s"%(each_item,"是質數")

print(str)

這段**可用於獲取3到1000000之間所有整數分解質因數的結果,演算法的實現主要是用於遞迴的思想。

isnotin函式用於校驗某個元素是否存在於質數表中。

getas是我們要實現的遞迴函式:

四個引數numlist用於存放分解質因數後的得到的結果,

primelist是我們在迴圈過程中獲取到的質因數表

remander第一次傳入的是我們要分解的整數,在遞迴中傳入的是除以質因數後的餘數

cycleminpri 是取余時當前的質因數值,第一次傳入1,不讓他生效,遞迴中,在他之前的質數就直接過掉,加快程式執行速度。

其他具體內容請參看**吧,思路比較簡單。

合數分解為質數的乘積模板

includeusing namespace std define ll long long define inf 1000 ll num 200 cnt num記錄n的質數因子,cnt記錄個數 intmain if i inf break 當n是個大數,如果再乙個個列舉一定超時,但是對於大數而言,...

整數分解為若干項之和

將乙個正整數n分解成幾個正整數相加,可以有多種分解方法,例如7 6 1,7 5 2,7 5 1 1,程式設計求出正整數n的所有整數分解式子。輸入格式 每個輸入包含乙個測試用例,即正整數n 0輸出格式 按遞增順序輸出n的所有整數分解式子。遞增順序是指 對於兩個分解序列n 1 和n 2 若存在i使得n ...

整數分解為若干項之和

將乙個正整數n分解成幾個正整數相加,可以有多種分解方法,例如7 6 1,7 5 2,7 5 1 1,程式設計求出正整數n的所有整數分解式子。每個輸入包含乙個測試用例,即正整數n 0 30 按遞增順序輸出n的所有整數分解式子。遞增順序是指 對於兩個分解序列n 1 和n 2 若存在i使得n 1 m 1 ...