题目连接: 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