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;
}
Приведенный выше код не дает правильного вывода для ряда тестовых случаев. Например:
Output N Correct Answer
232792560 19 232792560
1059261584 23 5354228880
1117182544 25 26771144400
1886839328 27 80313433200
Вы можете проверить Фам Трунг ответить на аналогичный вопрос Я спросил.