-2

2520 は、1 から 10 までの各数値で割り切れる最小の数値です。1 から N までのすべての数で割り切れる (余りなく割り切れる) 最小の正の数は?

入力形式 : 最初の行には、テスト ケースの数を示す T が含まれます。この後に T 行が続き、それぞれに整数 N が含まれます。

出力形式 : 各テスト ケースに必要な回答を出力します。

制約 : 1≤T≤10 1≤N≤40

質問への完全なリンク

これは、結果が hackerrank によって受け入れられたコードですが、解決策を理解するのに苦労しています。

誰でもこれを説明できますか?

ans *= i / (ans % i)行は何をしますか? あとはわかりました。

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>

bool check_if_prime(long n);

int main(void) {
    long t, n, i, ans = 1;
    std::cin >> t;
    while(t--){
        std::cin >> n;
        for(i = 2; i <= n; ++i){
            if(!check_if_prime(i)){
                if(ans % i)
                    ans *= i / (ans % i);
            }else
                ans *= i;
        }
        std::cout << ans << std::endl;
        ans = 1;
    }
    return 0;
}

bool check_if_prime(long n){
    if(n == 2)
        return true;
    for(long i = 2; i * i <= n; ++i){
        if(n % i == 0)
            return false;
    }
    return true;
}
4

1 に答える 1

3

上記のコードは、多くのテスト ケースに対して正しい出力を提供しません。例えば:

    Output     N   Correct Answer
    232792560  19  232792560
    1059261584 23  5354228880
    1117182544 25  26771144400
    1886839328 27  80313433200

私が尋ねた同様の質問に対するPham Trung の回答をチェックしてみてください。

于 2015-06-16T11:11:25.780 に答える