質因子分解
由於這道題目出現在質因子分解的章節裡面,所以我能想到要往質因子分解這條道上走,但是要是沒有這個提示我可能很難想到!我可能還會想動態規劃,哈哈哈哈哈。
首先,題中說n
小於等於1000,那麼如果直接暴力求解n!
肯定會超出long long
範圍,所以我們要另闢蹊徑,而最好的方法就是分解問題!
我們都知道n! = n * (n-1) (n-2) * ... * 2
。其次每個數都可以轉換成質因子的乘積,所以我們在n!
和a
之間找到了它們的公共部分——質因子!
因此,我們只要比較n!
的質因子是否包含a
ka^k
ak的質因子就可以判斷是否整除了。
//直接暴力是不可以的,因為n!會特別大
//正是因為特別大,所以我們要另闢蹊徑
//而最好的方法就是分解問題!
//我們使用質因子分解,將n!分解成質因子的乘積
//然後把a也進行分解,這樣就可以解題啦
#include
"bits/stdc++.h"
using
namespace std;
const
int maxn =
1010
;int prime[maxn]
;int pnum =0;
bool p[maxn]=;
int n;
int a;
unordered_map<
int,
int> mpn;
unordered_map<
int,
int> mpa;
void
find_prime()
}}}int
main()
}if(num !=1)
}// for(unordered_map::iterator it=mpn.begin();it!=mpn.end();it++)
//尋找a的質因子
int sqr =
(int
)sqrt
(1.0
*a)+1;
for(
int j=
0;prime[j]
<=sqr;j++)}
if(a !=1)
// for(unordered_map::iterator it=mpa.begin();it!=mpa.end();it++)
//接下來求k
int flag =
true
;int k =0;
for(
;flag ==
true
;k++)}
}printf
("%d\n"
,k-2);
}return0;
}
這裡使用unordered_map
不用結構體儲存質因子,會更加省心一些;
複習了一下unordered_map
的一些基本操作~~
依然是質因子分解三步走戰略!
《王道》上面的解法和我的不同。我感覺自己的這個時間複雜度更高一些。但是我不想看那個了,頭痛!
分解質因子問題
題目大意 有t 1 t 104 個數arr 1 arr 2 arr t 設每個數是n 2 n 109 任務是將這個n的質因子分解出來,包括重複的質因子,時限是1000ms。比如n 18,而18 2 3 3,所以輸出的結果就是2 3 3。n的範圍是 2 109 很容易想到n的質因子的範圍是 2 sqr...
質分解因數 質因子分解
3 參考 分解因數 時間限制 1000 ms 記憶體限制 32768 kb 長度限制 100 kb 判斷程式 standard 來自 小小 題目描述 所謂因子分解,就是把給定的正整數a,分解成若干個素數的乘積,即 a a1 a2 a3 an,並且 1 a1 a2 a3 an。其中a1 a2 an均為...
質因子分解
今天沒事做,我們來寫個部落格,混混等級!我們以求數的質因子的個數為例來講解。對於質因子分解最簡單最純粹的暴力我相信大家都會的。int getnum int x return ans 但是當處理的資料比較多,而且範圍也比較大的時候顯然這種方式就不再那麼適合了。既然我們是分解質因子,那麼我們就可以先預處...