hdu - 2054 又见GCD

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

相关文章
相关标签/搜索