Найменше спільне кратне
Обчисліть найменше спільне кратне усіх цілих чисел від 1 до N.
Вхідні дані
Вхідний файл містить натуральне число n (1 ≤ n≤ 30).
Вихідні дані
Виведіть ціле число - відповідь до задачі.
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] argv) throws IOException{
new Main().run();
}
//функція знаходження найбільшого спільного дільника
long NOD(long a,long b){
while (a!=0 && b!=0){
if (a > b) a = a % b; //для збільшення швидкості робимо через остачу від ділення
else b = b % a;
}
a=a+b;
return a;
}
//функція знаходження найбільшого спільного кратного
long NOK(long a,long b){
//згідно означення НСК=a*b/НОД(a,b)
//але щоб зменшити ймовірність виходу за межі розрядності
//спочатку ділимо більше, а потім множимо на менше
long aa,bb;
if (a>b) {aa=a;bb=b;}
else {aa=b;bb=a;}
return aa/NOD(a,b)*bb;
}
PrintWriter pw;
Scanner sc;
public void run() throws IOException{
sc = new Scanner(new File("input.txt"));
long n=sc.nextInt();
pw = new PrintWriter(new File("output.txt"));
long NOKr=1;
//знаходимо НСК для поперднього НСК та наступного числа
for (int i=2; i<=n; i++){
NOKr=NOK(i,NOKr);
}
pw.println(NOKr);
pw.close();
}
}
Немає коментарів:
Дописати коментар