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

相關文章
相關標籤/搜索