4. [2001年NOIP普及组] 最大公约数和最小公倍数问题

题目链接(码学堂,数据弱)

题目链接(洛谷,数据极强)

摘要:

1.P,Q是正整数(unsigned)
2.要求P,Q以x0为最大公约数,以y0为最小公倍数.
试求:满足条件的所有可能的两个正整数的个数.

 

分析1:

暴力枚举,看这两个数的最大公约数和最小公倍数是否与题目一样

 1 #include<iostream>
 2 #include<cmath>
 3 #include<cstdio> 
 4 using namespace std;
 5 long long p,q;
 6 long long ans;
 7 long long lcm(int x,int y)
 8 {
 9     long long  xx=x/p;
10     long long  yy=y/p;
11     return xx*yy*p;
12 }
13 long long gcd(long long x,long long y)
14 {
15     if(x%y==0) return y;
16     else return gcd(y,x%y);
17 }
18 int main()
19 {
20     cin>>p>>q;
21     for(long long i=0;i<=q;i+=p)//优化细节1:跳跃式枚举 
22         for(long long j=0;j<=q;j+=p)
23             if(lcm(i,j)==q&&gcd(i,j)==p)
24             {
25                 ans++;
26                 if(i==j) ans--;//注意位置!//平方的特殊情况! 
27             }
28     cout<<ans;
29     return 0;
30  } 

 

 

分析2:

数论做法

posted @ 2022-08-21 21:13  要不要吃哈密瓜  阅读(15)  评论(0编辑  收藏  举报