close
Content

寫一個程式算出一個正整數有多少個不同的質因數。例如:45=3*3*5,所以45有2個質因數(3和5)。

Input

每組測試資料一列。含有1個正整數 n( 1 < n <= 1000000)。

若 n=0 代表輸入結束。

Output

對每組測試資料輸出一列,n有多少個不同的質因數。輸出格式請參考Sample Output。

Sample Input #1
7
8
45
289384
930887
692778
636916
747794
238336
885387
760493
516650
641422
0
Sample Output #1
7 : 1
8 : 1
45 : 2
289384 : 3
930887 : 2
692778 : 5
636916 : 4
747794 : 3
238336 : 3
885387 : 2
760493 : 2
516650 : 3
641422 : 3

這一題也是難在要如何不超時

python:

"""這裡住要是建造質數表"""
max=100
f=[0,1]*(max//2+1)
f[0]=0;f[1]=0;f[2]=1;f[3]=1
sam=[]
h=int(max**0.5)
for i in range(3,h+1,2):
    if(f[i]==1):
        for j in range(i*i,max+1,i*2):
            f[j]=0
#rint(f) """那這裡會變成[0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0,.....,把他變成數字形態"""

for i in range(len(f)):
    if f[i]==1:sam.append(i)
#print(sam) """[2, 3, 5, 7, 11, 13, 17, 19, 23......"""


while True:
    try:
        n=int(input())
        c=n
        if n==0:break
        ans=0 #計算數量用
        for i in sam:
            if i>n:break #這行一定要有
            if n%i==0:ans+=1
            while n%i==0 :n//=i
        if n!=1:ans+=1 #可能是%到最後剩下他自己,所以+1
        print(f'{c} : {ans}')
    except:
        break
arrow
arrow
    創作者介紹
    創作者 趴趴熊日常 的頭像
    趴趴熊日常

    資工趴趴熊的小天地

    趴趴熊日常 發表在 痞客邦 留言(0) 人氣()