列表

详情


NC16691. [NOIP2001]最大公约数和最小公倍数问题

描述

输入二个正整数x0,y0( 2 ≤ x0 < 100000, 2 ≤ y0 ≤ 1000000 ),求出满足下列条件的P,Q的个数
条件:  1.P,A是正整数
2.要求P,Q以x0为最大公约数,以y0为最小公倍数.
试求:满足条件的所有可能的两个正整数的个数.

输入描述

2个正整数x0,y0

输出描述

1个数,表示求出满足条件的P,Q的个数

示例1

输入:

3 60

输出:

4

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Python3 解法, 执行用时: 48ms, 内存消耗: 4524K, 提交时间: 2022-04-10 16:31:03

import math
x0, y0 = map(int, input().split())
a_b = x0 * y0
cnt = 0
for i in range(2, a_b):
    j = int(a_b / i )
    if a_b % i == 0 and math.gcd(i,j) == x0:
        cnt += 1
print(cnt)

C++(clang++11) 解法, 执行用时: 3ms, 内存消耗: 376K, 提交时间: 2020-11-03 15:48:06

#include<bits/stdc++.h>
using namespace std;
int x,y,i=1,j,s;
int main()
{
	cin>>x>>y;
	for(;i<=x*y;i++)
	{
		if(x*y%i==0&&__gcd(i,x*y/i)==x)s++;
	}cout<<s;
}

C++14(g++5.4) 解法, 执行用时: 2ms, 内存消耗: 492K, 提交时间: 2020-10-08 08:38:46

#include<bits/stdc++.h>
using namespace std;
int x,y,i=1,j,s;
main()
{
	cin>>x>>y;
	for(;i<=x*y;i++)
	{
		if(x*y%i==0&&__gcd(i,x*y/i)==x)s++;
	}cout<<s;
}

上一题