P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题

题目传送门

题目描述

输入两个正整数 x0​,y0​,求出满足下列条件的 P,Q 的个数:

  1. P,Q 是正整数。

  2. 要求 P,Q 以 x0​ 为最大公约数,以 y0​ 为最小公倍数。

试求:满足条件的所有可能的 P,Q 的个数。

输入格式

一行两个正整数 x0​,y0​。

输出格式

一行一个数,表示求出满足条件的 P,Q 的个数。

输入输出样例

输入 #1

3 60

输出 #1

4

说明/提示

P,Q 有 44 种:

  1. 3,60。
  2. 15,12。
  3. 12,15。
  4. 60,3。

对于 100% 的数据,2≤x0​,y0​≤105。

【题目来源】

NOIP 2001 普及组第二题

思路 

  • c++ 里有一个自带的求 ⁡gcd 的函数叫 __gcd 。现在 NOIP 已经可以使用了。

  • 当积相同且 gcd 相同时,⁡lcm 也一定相同,因此只需判断是否满足一、二两个条件即可。

#include
using namespace std;
long long m,n,s;
int main()
{
	cin>>m>>n;
	if(m==n)s--;
	n*=m;
	for(long long i=1;i<=sqrt(n);i++)
    {
		if(n%i==0&&__gcd(i,n/i)==m)s+=2;
	}
	cout<

 如有错误,欢迎大家评论区指出!感谢!

你可能感兴趣的:(算法,数据结构,leetcode)