码迷,mamicode.com
首页 > 其他好文 > 详细

唯一分解定理

时间:2018-07-25 21:10:15      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:src   bsp   namespace   queue   sof   one   while   continue   soft   

唯一分解定理:任何大于1的自然数都可以唯一分解成有限个质数的乘积

技术分享图片 

这里的 n > 1;

定理就是这样,我们来看一个题目: https://vjudge.net/problem/UVA-10892

首先我们可以将a、b进行分解 a = (p1^a1)*(p2^a2)......(pn^an),b = (p1^b1)*(p2^b2)......(pn^an)

它们的最小公倍数(LCM)我们也进行分解:r = (p1^r1)*(p2^r2) ...... (pn^rn)

这里就会有 ri = max{ai, bi} , 这样一来我们就可以构造所有的a和b的组合了,现在假设a的 pi项 的 ai 为 ri,则我们b的 pi项 对应的 bi 就可以取 [0, ri-1]共 ri 个值,同理对b的 pi项 的 bi 也可以取 ri,a就也有 ri 个可取的值,再加上a和b的 pi 项同时为 ri 这种情况,就一共有 2*ri+1 中情况。这样一来我们统计重复的情况即 即统计了 (a,b) 又统计了 (b,a)所以我们得将结果除以2,但是 a,b全是LCM的情况我们只统计了一次,所以我们还得加上1

代码如下:

 

技术分享图片
 1 #include <algorithm>
 2 #include <queue>
 3 #include <cstdio>
 4 #include <iostream>
 5 #include <cstring>
 6 #include <map>
 7 #include <cmath>
 8 using namespace std;
 9 
10 typedef long long LL;
11 const int maxn = 1000;
12 LL u[maxn], cnt;
13 
14 bool fenjie(LL n){
15     LL f = (LL) sqrt(n+0.5);
16     bool isprimer = true;
17     for(int i = 2; i <= n; ++i) {
18         if(i > f && isprimer) return true;
19         if(n%i == 0) {
20             u[cnt] = 0;
21             while(n%i == 0) {
22                 isprimer = false;
23                 u[cnt]++;
24                 n /= i;
25             }
26             cnt++;
27         }
28     }
29     return false;
30 }
31 
32 int main(){
33 //    freopen("out.txt", "w", stdout);
34 //    freopen("in.txt", "r", stdin);
35     LL n, ans;
36     while(cin >> n && n) {
37         cnt = 0;
38         if(fenjie(n)) {
39             cout << n << " " << 2 << endl;
40             continue;
41         }
42         ans = 1;
43         for(int i = 0; i < cnt; ++i){
44             ans *= (2*u[i] + 1);
45         }
46         ans = ans/2 + 1;
47         cout << n << " " << ans << endl;
48     }
49     return 0;
50 }
View Code

 

唯一分解定理

标签:src   bsp   namespace   queue   sof   one   while   continue   soft   

原文地址:https://www.cnblogs.com/DynastySun/p/9368282.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!