Given x and y (2 <= x <= 100,000, 2 <= y <= 1,000,000), you are to count the number of p and q such that:
1) p and q are positive integers;
2) GCD(p, q) = x;
3) LCM(p, q) = y.
Input
x and y, one line for each test.
Output
Number of pairs of p and q.
Sample Input
3 60
Sample Output
4
Author: ZHOU, Qiang
Source: ZOJ Monthly, April 2003
求最大公约数与最小公倍数为x和y的p与q的组合有多少对,只要求出1~y/x内互质的书有多少对即可,WA了一次,忘了考虑y不能整除x的情况
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
int main(){
int x,y;
while( ~scanf("%d %d",&x,&y) ){
if( y % x ){
printf("0\n");
continue;
}
int flag = y / x,ret=0;
for( int i = 1 ; i <= flag ; ++i ){
if( flag % i == 0 ){
if( gcd(i,flag/i) == 1 )
ret++;
}
}
printf("%d\n",ret);
}
return 0;
}