最小公倍数 (Benefit,UVa 11889)
1 #include <iostream> 2 #include <string.h> 3 #include <string> 4 #include <fstream> 5 #include <algorithm> 6 #include <stdio.h> 7 #include <vector> 8 #include <queue> 9 #include <set> 10 #include <cmath> 11 using namespace std; 12 const double eps = 1e-8; 13 const int INF=0x7fffffff; 14 #define MAXN 10000002 15 typedef long long LL; 16 int vis[MAXN]; 17 int prime[700000]; 18 19 void sieve(int n) 20 { 21 int m=(int)sqrt(n+0.5); 22 memset(vis,0,sizeof(vis)); 23 for(int i=2;i<=m;i++)if(!vis[i]) 24 for(int j=i*i;j<=n;j+=i)vis[j]=1; 25 } 26 27 int gen_prime(int n) 28 { 29 sieve(n); 30 int c=0; 31 for(int i=2;i<=n;i++)if(!vis[i]) 32 prime[c++]=i; 33 return c; 34 } 35 36 LL gcd(LL a,LL b) 37 { 38 return b==0?a:gcd(b,a%b); 39 } 40 41 int main() 42 { 43 int T;scanf("%d",&T); 44 LL a,b,c; 45 while(T--) 46 { 47 cin>>a>>c; 48 if(c%a!=0)printf("NO SOLUTION\n"); 49 else 50 { 51 b=c/a; 52 LL temp=b; 53 while(temp!=1) 54 { 55 temp=gcd(b,a); 56 b*=temp; 57 a/=temp; 58 } 59 cout<<b<<endl; 60 } 61 } 62 return 0; 63 }
c/a=b/gcd(a,b) 找出a与b/gcd(a,b)所用相同的质因子 乘上b/gcd(a,b)即是最小的b