-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 回答