2019独角兽企业重金招聘Python工程师标准>>>
题目链接: hdu - 2054
b和c不能相等也是条件。 b是gcd(a, c),所以b|a且b|c。令a除以b,与这个商互素的最小数就是答案。 这个最小数一定是素数,因为把a/b写成素数因子幂相乘的形式,找它不含的最小素数即可。
#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;
}
同样用到了素数筛查。