C++ 欧拉5号罐头计划';我不明白答案

C++ 欧拉5号罐头计划';我不明白答案,c++,c++11,greatest-common-divisor,lcm,C++,C++11,Greatest Common Divisor,Lcm,2520是最小的数字,可以被1到10之间的每一个数字除,没有任何余数。 什么是最小的正数,它可以被1到N的所有数整除(不带余数整除) 输入格式: 第一行包含表示测试用例数量的T。后面是T行,每行包含一个整数N 输出格式: 打印每个测试用例所需的答案 限制条件: 1.≤T≤10 1.≤N≤四十 完整链接到 以下代码的结果被hackerrank接受,但我在理解解决方案时遇到了困难 有人能解释一下吗 行ans*=i/(ans%i)的作用是什么? 剩下的我都明白了。 #include <cmath

2520是最小的数字,可以被1到10之间的每一个数字除,没有任何余数。 什么是最小的正数,它可以被1到N的所有数整除(不带余数整除)

输入格式: 第一行包含表示测试用例数量的T。后面是T行,每行包含一个整数N

输出格式: 打印每个测试用例所需的答案

限制条件: 1.≤T≤10 1.≤N≤四十

完整链接到

以下代码的结果被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;
}
#包括
#包括
#包括
#包括
#包括
布尔检查素数(长n);
内部主(空){
长t,n,i,ans=1;
标准:cin>>t;
而(t--){
标准:cin>>n;

对于(i=2;i而言,上述代码没有为许多测试用例提供正确的输出。例如:

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

您可能想查看我问的问题的答案。

您的调试器可以。您问了吗?它似乎非常基本和简单。您不明白什么?ans%I是“ans”和“I”的GCD@nvoigt@AneeshDandime不,不是。
%
运算符有很好的文档记录。您使用的是哪种语言引用(如果有)不难找到它?@hvd ans*=i/(ans%i)做什么?逻辑上它应该给出'ans'和'i'的lcm,对吗?