洛谷1029 最大公约数和最小公倍数问题 解题报告

洛谷1029 最大公约数和最小公倍数问题

本题地址: http://www.luogu.org/problem/show?pid=1029

题目描述

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

输入输出格式

输入格式:

二个正整数x0,y0

输出格式:

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

输入输出样例

输入样例#1:

3 60

输出样例#1:

4

说明

P,Q有4种
3 60
15 12
12 15
60 3

题解

枚举

思路很简单。只需枚举所有可能的数值,如果满足条件,则个数+1,最后输出个数。

注意:

1.最大公约数需要按照从大到小的顺序枚举,最小公倍数则是按照从小到大的顺序枚举。

2.不要去重,比如说明中的(3,60)(60,3)前后顺序不同需要计数两次。

下面附上代码。

代码

  1. program P1029;    
  2. var    
  3.  x0,y0,s,ans,k:longint;    
  4. begin    
  5.  readln(x0,y0);    
  6.  if y0 mod x0<>then    
  7.  begin    
  8.   writeln(0);    
  9.   halt;    
  10.  end;    
  11.  s:=y0 div x0;    
  12.  k:=2;    
  13.  ans:=1;    
  14.  while k<=s do    
  15.  begin    
  16.   if s mod k=then    
  17.   begin    
  18.    while s mod k=do s:=s div k;    
  19.    ans:=ans*2;    
  20.   end;    
  21.   inc(k);    
  22.  end;    
  23.  writeln(ans);    
  24. end.    

(本文系笔者原创,未经允许不得转载)

原文地址:https://www.cnblogs.com/yzm10/p/4752001.html