質因子分解 整除問題 上交

2021-10-23 05:16:32 字數 1849 閱讀 4535

質因子分解

由於這道題目出現在質因子分解的章節裡面,所以我能想到要往質因子分解這條道上走,但是要是沒有這個提示我可能很難想到!我可能還會想動態規劃,哈哈哈哈哈。

首先,題中說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 但是當處理的資料比較多,而且範圍也比較大的時候顯然這種方式就不再那麼適合了。既然我們是分解質因子,那麼我們就可以先預處...