描述
As we know, gcd(A, B) means the Greatest Common Divisor (GCD) of A and B.
But zy thinks it is so easy to just let you calculate it.
So now your task is to calculate gcd(A, B^B),it is easy right?
Notice: B ^ B means B multiply by himself B times.
输入
Multiply test case, each case per line.
Each line 2 integers A, B, 1 <= A, B <= 1000
输出
For each test case output one line( one number ), indicating the value of gcd (A, B^B)
样例输入1
100 1
100 2
样例输出1
1
4
C++实现:
#include<iostream>
#include<cmath>
using namespace std;
bool If_prime(int n)
{
for(int i=2;i<=sqrt(n);i++)
if(n%i==0) return false;
return true;
}
void prime_factor(int *a,int n)
{
int i;
for(i=2;i<=n;i++)
{
if(If_prime(i) && n%i==0)
{
a[i]++;
n/=i;
i--;
}
}
}
int main(){
int a[500],b[500];
int n,m,i,sum;
while(cin>>n>>m){
sum=1;
for(i=0;i<500;i++)
{
a[i]=0;
b[i]=0;
}
prime_factor(a,n);
prime_factor(b,m);
for(i=0;i<500;i++)
{
if(b[i])
b[i]*=m;
}
for(i=0;i<500;i++)
{
if(a[i] && b[i])
{
sum*=pow(i,a[i]<b[i]?a[i]:b[i]);
}
}
cout<<sum<<endl;
}
return 0;
}