LightOJ 1341 Aladdin and the Flying Carpet(唯一分解定理)

Posted 谦谦君子,陌上其华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LightOJ 1341 Aladdin and the Flying Carpet(唯一分解定理)相关的知识,希望对你有一定的参考价值。

http://lightoj.com/volume_showproblem.php?problem=1341

题意:
给你矩形的面积(矩形的边长都是正整数),让你求最小的边大于等于b的矩形的个数。

 

思路:
根据唯一分解定理,把X写成若干素数相乘的形式,则X的正因数的个数为:(1+a1)(1+a2)(1+a3)...(1+an)。(ai为指数)

因为这道题目是求矩形,所以知道一个正因数后,另一个正因数也就确定了,所以每组正因数重复计算了两遍,需要除以2。

最后减去小于b的因数。

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<vector>
 6 #include<queue>
 7 #include<cmath>
 8 #include<map>
 9 #include<stack>
10 using namespace std;
11 
12 const int maxn=1e6+1000;
13 
14 int n;
15 int cnt=0;
16 int primes[maxn];
17 int vis[maxn];
18 
19 void get_primes()
20 {
21     int m=sqrt(maxn+0.5);
22     for(int i=2;i<=m;i++)
23     {
24         if(!vis[i])
25         {
26             for(int j=i*i;j<=maxn;j+=i)
27                 vis[j]=1;
28         }
29     }
30     for(int i=2;i<=maxn;i++)
31         if(!vis[i])   primes[cnt++]=i;
32 }
33 
34 int main()
35 {
36     //freopen("D:\\input.txt","r",stdin);
37     int T;
38     int kase=0;
39     get_primes();
40     scanf("%d",&T);
41     while(T--)
42     {
43         long long a,b;
44         scanf("%lld%lld",&a,&b);
45         long long x=a;
46         if(a<=b*b)  {printf("Case %d: 0\n",++kase);continue;}
47         long long ans=1;
48         for(int i=0;i<cnt&&primes[i]*primes[i]<=a;i++)
49         {
50             if(a%primes[i]==0)
51             {
52                 long long num=0;
53                 while(a%primes[i]==0)
54                 {
55                     num++;
56                     a/=primes[i];
57                 }
58                 ans*=(1+num);
59             }
60         }
61         if(a>1)  ans*=2;
62         ans/=2;
63         for(long long i=1;i<b;i++)
64             if(x%i==0)  ans--;
65          printf("Case %d: %lld\n",++kase,ans);
66     }
67     return 0;
68 }

 

以上是关于LightOJ 1341 Aladdin and the Flying Carpet(唯一分解定理)的主要内容,如果未能解决你的问题,请参考以下文章

[LightOJ 1341] Aladdin and the Flying Carpet (算数基本定理(唯一分解定理))

LightOJ1341 Aladdin and the Flying Carpet

LightOJ 1341 Aladdin and the Flying Carpet(唯一分解定理)

Aladdin and the Flying Carpet (LightOJ - 1341)简单数论算术基本定理分解质因数(未完成)

LightOJ1341 Aladdin and the Flying Carpet 约数相关问题

LightOJ-1341 Aladdin and the Flying Carpet 分解质因数(注意对大素数的优化)