http://domen111.github.io/UVa-Easy-Viewer/?516
給一個數字 質因數分解後式,求 的質因數分解式
可以利用 stringstream 讀取輸入,取得所有數值就可以拿到 以及
至於質因數分解的部分,我們可以藉由質數篩的過程當中紀錄每個數字第一次是被誰篩掉(也就是最小因數)
例如: 10 -> 2
9 -> 3
17 -> 17
如此一來,對於每個詢問 每次先找到最小因數 ,紀錄當前的值 可以被整除幾次,並且將 除以 ,直到 為 的時候表示我們已經找完了
質數篩的複雜度為
每筆測資計算 時間複雜度約為
每筆測資質因數分解時間複雜度約為
每筆測資輸出時間複雜度約為
其中, 表示 的不同質因數個數。 表示 的質因數個數
總時間複雜度約為
http://domen111.github.io/UVa-Easy-Viewer/?10699
多筆輸入,每筆輸入包含一個正整數 , 求 有多少不同的質因數
跟上一題類似,先透過質數篩找到每個數的最小質因數 ,再透過不斷的除以 直到剩下 為止,中間除去重複的以外,剩下就是答案
質數篩的複雜度為
每筆測資質因數分解時間複雜度約為 也有人說是約為
總時間複雜度約為
http://domen111.github.io/UVa-Easy-Viewer/?10789
給一串字串 ,統計每個字元出現的次數,並輸出次數為質數的字元
先建立質數表,統計過後查表即可
建表時間複雜度為
統計時間複雜度為
總時間複雜度為
http://domen111.github.io/UVa-Easy-Viewer/?11960
多筆測資,每筆測資包含一個正整數 ,求所有 的正整數當中,因數個數最多的最大整數為何
先做質因數分解,並且透過以下的想法可以找出每個數的因數個數
我們可以觀察
其中的因數包含了
觀察一下會發現,這些因數都是由 的某個小餘等於 的次方乘上 的某個小於等於 的次方組合而成
也就是說我可以選擇要拿多少 以及要拿多少 ,因數個數為
所以我們得到若 ,則 的因數個數為
話說回來,利用上述的性質,加上質因數分解,就可以輕鬆求出每個數值的因數個數
而由於題目只需要所有 的正整數當中,因數個數最多的最大整數,所以我們可以預先處理好所有人的答案
質數篩的複雜度為
對所有數值做質因數分解,時間複雜度約為
預處理答案的時間複雜度為
每筆回答時間複雜度為
總時間複雜度為
SCIST 演算法 題解