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

题目链接: https://vjudge.net/problem/LightOJ-1341

题目描述:

问有几种边长为整数的矩形面积等于a,且矩形的短边不小于b

算数基本定理的知识点:https://baike.baidu.com/item/%E7%AE%97%E6%9C%AF%E5%9F%BA%E6%9C%AC%E5%AE%9A%E7%90%86/10920095?fr=aladdin

 1 #include<cstdio>
 2 #include<vector>
 3 #include<cstring>
 4 #include <cmath>
 5
 6 using namespace std;
 7
 8 typedef long long ll;
 9
10 const int maxn = 1e6+10;
11
12 bool vis[maxn];
13 vector<ll> v;
14 ll a,b;
15
16 //素数打表
17 void init_prime()
18 {
19     memset(vis,1,sizeof(vis));
20     for(ll i = 2;i < maxn;i++)
21     {
22         for(ll j = i * i;j < maxn;j += i)
23         {
24             vis[j] = 0;
25         }
26     }
27     for(ll i = 2;i < maxn;i++)
28     {
29         if(vis[i] == 1)
30             v.push_back(i);
31     }
32 }
33
34 ll a_count(ll a);
35
36 int main()
37 {
38     int t,flag = 1;
39     init_prime();
40     scanf("%d",&t);
41     while(t--)
42     {
43         scanf("%lld%lld",&a,&b);
44         if(b >= sqrt(a))
45         {
46             printf("Case %d: %d\n",flag++,0);
47             continue;
48         }
49         else
50         {
51             ll cnt = 0;
52             for(ll i = 1;i < b;i++)
53             {
54                 if(a % i == 0)
55                     cnt++;
56             }
57             ll sum = a_count(a)/2;
58             sum -= cnt;
59             printf("Case %d: %lld\n",flag++,sum);
60         }
61     }
62     return 0;
63 }
64
65
66 ll a_count(ll a)
67 {
68     if(a == 0)
69         return 0;
70     ll num,sum = 1,i = 0;
71     while(v[i] < a && i < v.size())
72     {
73         if(a % v[i] == 0)
74         {
75             num = 0;
76             while(a % v[i] == 0)
77             {
78                 a /= v[i];
79                 num++;
80             }
81             sum *= (1+num);
82         }
83         i++;
84     }
85     if(a>1)
86         sum *= 1+1;
87     return sum;
88 }

原文地址:https://www.cnblogs.com/youpeng/p/10269257.html

时间: 2024-11-11 15:45:24

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

LightOJ 1341 Aladdin and the Flying Carpet 算数基本定理

题目大意:给出面积n,和最短边m,求能形成的矩形的个数(不能为正方形). 题目思路:根据算数基本定理有: 1.每个数n都能被分解为:n=p1^a1*p2^a2*^p3^a3……pn^an(p为素数); 2.n的正因数的个数sum为:sum=(1+a1)*(1+a2)*(1+a3)……(1+an); 最短边为m,若m>=sqrt(n),则无解.所以m最多我10^6,可遍历找出1-m中n的因子,并用sum去减去这类因子的个数. ps:最近一直想去证明算数基本定理,可是感觉能力不够,唉,慢慢来吧. #

LightOJ 1341(Aladdin and the Flying Carpet )算术基本定理

It's said that Aladdin had to solve seven mysteries before getting the Magical Lamp which summons a powerful Genie. Here we are concerned about the first mystery. Aladdin was about to enter to a magical cave, led by the evil sorcerer who disguised hi

1341 - Aladdin and the Flying Carpet ---light oj (唯一分解定理+素数筛选)

http://lightoj.com/volume_showproblem.php?problem=1341 题目大意: 给你矩形的面积(矩形的边长都是正整数),让你求最小的边大于等于b的矩形的个数. 什么叫唯一分解定理:算术基本定理可表述为:任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积N=P1a1P2a2P3a3......Pnan,这里P1<P2<P3......<Pn均为质数,其中指数ai是正整数.这样的分解称为 N 的标准分解式 我们求出n的因

LightOJ 1341 - Aladdin and the Flying Carpet (唯一分解定理 + 素数筛选)

http://lightoj.com/volume_showproblem.php?problem=1341 Aladdin and the Flying Carpet Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Status Practice LightOJ 1341 Description It's said that Aladdin had to solve seven

LightOJ 1341 - Aladdin and the Flying Carpet(算术基本定理啊)

题目链接:http://lightoj.com/volume_showproblem.php?problem=1341 It's said that Aladdin had to solve seven mysteries before getting the Magical Lamp which summons a powerful Genie. Here we are concerned about the first mystery. Aladdin was about to enter

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<

LightOJ 1341 - Aladdin and the Flying Carpet 基本因子分解

http://www.lightoj.com/volume_showproblem.php?problem=1341 题意:给你长方形的面积a,边最小为b,问有几种情况. 思路:对a进行素因子分解,再乘法原理算一下,最后减去小于b的因子的情况即可. /** @Date : 2016-12-01-19.04 * @Author : Lweleth ([email protected]) * @Link : https://github.com/ * @Version : */ #include<b

LightOJ 1341 - Aladdin and the Flying Carpet【合数分解】

题目链接:http://lightoj.com/volume_showproblem.php?problem=1341 题意: 给出整数 a 和 b ,求区间[b, a] 内的 a 的约数对的个数,a 的约数对(比如[2, 3] 与 [3, 2] 为同一对). 解法: 主要利用公式: 一个整数n可以表示为若干素数乘积: n = p1^a1 * p2^a2*-*pm^am; 则 n 的正因数的个数可以表示为: num = (a1+1)*(a2+1)-(am+1); 代码: #include <st

Light OJ 1341 Aladdin and the Flying Carpet

It's said that Aladdin had to solve seven mysteries before getting the Magical Lamp which summons a powerful Genie. Here we are concerned about the first mystery. Aladdin was about to enter to a magical cave, led by the evil sorcerer who disguised hi