題目連接: hdu - 2054php
b和c不能相等也是條件。 b是gcd(a, c),因此b|a且b|c。令a除以b,與這個商互素的最小數就是答案。 這個最小數必定是素數,由於把a/b寫成素數因子冪相乘的形式,找它不含的最小素數便可。ios
#include <cstdio> #include <vector> #include <iostream> using namespace std; int not_prime[1010]; vector<int> primes; int main() { for(int i = 2; i <= 1000; i++) { if(!not_prime[i]) { primes.push_back(i); for(int j = 2; j*i <= 1000; j++) not_prime[i*j] = 1; } } int n; cin >> n; while(n--) { int a, b; scanf("%d%d", &a, &b); // if(b > 1) { printf("%d\n", 2*b); continue; } // if(a == 1) { printf("%d\n", 2); continue; } a /= b; for(int i = 0; i < primes.size(); i++) { if(a % primes[i]) { printf("%d\n", primes[i]*b); break; } } } return 0; }
一樣用到了素數篩查。spa