唯一分解定理(歐幾里得)

2022-05-23 16:30:16 字數 1088 閱讀 9542

唯一分解(算數基本定理);任何乙個大於1的自然數n,如果n不為質數,那麼n可以唯一分解成有限個質數的乘積p1^a1*p2^a2*...pn^an,這裡p1n 的標準分解式。最早證明是由歐幾里得給出的。(擴充套件:交換代數)

例題:codeforces round #596 (div. 2, based on technocup 2020 elimination round 2) d. power products (唯一分解+雜湊)

題意:找有幾對(ai,aj)使得ai*aj=x^k;中的x存在為正整數;

如果兩個數的質因數分解後的每個數的因子個數都是k的倍數,那麼就說明有解(c++的stl是個超級神奇的東西)

題解:暴力分別對ai,aj進行質因數分解,對質因數的個數進行模k儲存,然後雜湊儲存,用於查詢,題目要求找x,那麼對ai和aj唯一分解之後,他們因子的所有次冪之和 模k應為0,

所以我們就可以查詢乙個數唯一分解之後,對冪次模k之後的剩下的數(k-(p%k)) 進行雜湊相加統計。

code;

1 #include2

using

namespace

std;

3const

int maxn=1e5+10;4

intn,k;

5int

a[maxn];

6 mapint,int> >,int>mp;

7int

main()824

if(num%k)

25 v1.push_back(make_pair(cur,num%k));//

每個質因數的個數有幾個26}

27if(a[i]>1

)28 v1.push_back(make_pair(a[i],1

));29 vectorint,int> >v2;

30for(int j=0; j)

3134 ans+=mp[v2];

35 mp[v1]++;36}

37 cout38//

system("pause");

39return0;

4041 }

唯一分解定理

任意乙個大於1的正整數都能表示成若干個質數的乘積,且表示的方法是唯一的。換句話說,乙個數能被唯一地分解成質因數的乘積。因此這個定理又叫做唯一分解定理。c include include include using namespace std int main int num 32 int local...

唯一分解定理

唯一分解定律 又稱為正整數的唯一分解定理,即 每個大於1的自然數均可寫為質數的積,而且這些素因子按大小排列之後,寫法僅有一種方式。當題目有大數相除,求餘數時,精度要求高時.就要運用唯一分解定律 以下唯一分解定律證明 為了真正地證明,分解質因數的方法是唯一的,我們將再次用到反證法。假設存在某些數,它們...

唯一分解定理

problem description 假設x是乙個正整數,它的值不超過65535 即1 x 65535 請編寫乙個程式,將x分解為若干個素數的乘積。input 輸入的第一行含乙個正整數k 1 k 10 表示測試例的個數,後面緊接著k行,每行對應乙個測試例,包含乙個正整數x。output 每個測試例...