relha 发表于 2015-11-26 07:36:45

codechef(MAY15)第三题Chef and Prime Divisors


http://www.codechef.com/MAY15/problems/CHAPD





You are given two positive integers – A and B. You have to check whether A is divisible by all the prime divisors of B.


Input


The first line of the input contains an integer T denoting the number of test cases. The description of T test cases follows.

For each test case, you are given two space separated integers – A and B.


Output


For each test case, output "Yes" (without quotes) if A contains all prime divisors of B, otherwise print "No".


Constraints


[*]1 ≤ T ≤ 104
[*]1 ≤ A, B ≤ 1018


Subtasks


[*]Subtask 1 (20 points):1 ≤ B ≤ 107
[*]Subtask 2 (30 points):1 ≤ A ≤ 107
[*]Subtask 3 (50 points): Original constraints


Example

Input:
3
120 75
128 16
7 8
Output:
Yes
Yes
No


Explanation


Example case 1. In the first case 120 = 23*3*5 and 75 = 3*52. 120 is divisible by both 3 and 5. Hence, we will print "Yes"

Example case 2. In the second case both 128 and 16 are powers of two. Hence, the answer is "Yes"

Example case 3. In the third case 8 is power of two and 7 is not divisible by 2. So, the answer is "No"





题意:给定数字A和B,判断A是否能被B的所有质因子整除。

思路:

所有数都可以看成是被很多的质数相乘,所以把B也看成这样的数,由于B和A的最大公约数一定能被A除,所以想到一直GCD处理B,如果最后B是1就说明整个B的因素都能被A整除

#include<iostream>
using namespace std;
long long gcd(long long a,long long b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
long long T;
cin >> T;
while(T--)
{
long long a,b;
cin >> a >> b;
long long num = gcd(a,b);
while(num>1)
{
b = b/num;
num = gcd(a,b);
}
if(b == 1)
cout<<&quot;Yes&quot;<<endl;
else
cout<<&quot;No&quot;<<endl;
}
return 0;
}



页: [1]
查看完整版本: codechef(MAY15)第三题Chef and Prime Divisors