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;
}