题目
题目描述:
输入两个正整数 x 0 , y 0 x_0, y_0 x 0 , y 0 ,求出满足下列条件的 P , Q P, Q P , Q 的个数:
P , Q P,Q P , Q 是正整数。
要求 P , Q P, Q P , Q 以 x 0 x_0 x 0 为最大公约数,以 y 0 y_0 y 0 为最小公倍数。
试求:满足条件的所有可能的 P , Q P, Q P , Q 的个数。
输入格式:
一行两个正整数 x 0 , y 0 x_0, y_0 x 0 , y 0 。
输出格式:
一行一个数,表示求出满足条件的 P , Q P, Q P , Q 的个数。
数据范围与说明:
P , Q P,Q P , Q 有 4 4 4 种:
3 , 60 3, 60 3 , 6 0 。
15 , 12 15, 12 1 5 , 1 2 。
12 , 15 12, 15 1 2 , 1 5 。
60 , 3 60, 3 6 0 , 3 。
对于 100 % 100\% 1 0 0 % 的数据,2 ≤ x 0 , y 0 ≤ 10 5 2 \le x_0, y_0 \le {10}^5 2 ≤ x 0 , y 0 ≤ 1 0 5 。
【题目来源】
NOIP 2001 普及组第二题
输入输出样例 #1
输入:
输出:
题意
简述:
输入两个正整数 x 0 , y 0 x_0, y_0 x 0 , y 0 ,求出满足下列条件的 P , Q P, Q P , Q 的个数:
P , Q P,Q P , Q 是正整数。
要求 P , Q P, Q P , Q 以 x 0 x_0 x 0 为最大公约数,以 y 0 y_0 y 0 为最小公倍数。
试求:满足条件的所有可能的 P , Q P, Q P , Q 的个数。
代码
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include <bits/stdc++.h> using namespace std;typedef long long ll;ll gcd (int x,int y) { while (x%y){ int tmp=x%y; x=y; y=tmp; } return y; } ll lcm (int x,int y) { return x*y/gcd (x,y); } int main () { ll x,y; cin>>x>>y; ll count=0 ; for (int i = x; i <= y; i ++) { int j = x * y / i; if (gcd (i, j) == x && lcm (i, j) == y) { count++; } } cout<<count; return 0 ; }