結果

問題 No.2610 Decreasing LCMs
ユーザー LyricalMaestro
提出日時 2025-05-05 16:50:11
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 68 ms / 1,000 ms
コード長 1,571 bytes
コンパイル時間 535 ms
コンパイル使用メモリ 82,372 KB
実行使用メモリ 76,536 KB
最終ジャッジ日時 2025-05-05 16:50:14
合計ジャッジ時間 3,063 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 22
権限があれば一括ダウンロードができます

ソースコード

diff #

## https://yukicoder.me/problems/no/2610

import math

def is_prime(p):
    sqrt_p = int(math.sqrt(p))
    for q in range(2, sqrt_p + 1):
        if p % q == 0:
            return False
        
    return True

def calc_lcm(a, a2):
    gcd = calc_gcd(a, a2)
    return a * a2 // gcd

def compare_lcm(p, new_array):
    a = new_array[0]
    a2 =new_array[1]

    lcm1 = calc_lcm(a, p)
    lcm2 = calc_lcm(a, a2)
    return lcm1 > lcm2

def calc_gcd(A, B):
    """
    正の整数A, Bの最大公約数を計算する
    """
    a = max(A, B)
    b = min(A, B)
    while a % b > 0:
        c = a % b
        a = b
        b = c
    return b


def main():
    N = int(input())
    array = [5, 6, 8]
    primes = {2, 3, 5}
    for _ in range(3, N):
        new_array = []
        for a in array:
            new_array.append(a * 2)
        
        for p in range(2, 100000):
            if p not in primes and is_prime(p) and compare_lcm(p, new_array):
                primes.add(p)
                array = [p] + new_array
                break
    
    for i in range(N - 1):
        if array[i] >= array[i + 1]:
            print("No")
            return
        
    for i in range(N - 2):
        a = array[i]
        a2 = array[i + 1]

        gcd1 = calc_gcd(a, a2)
        lcm1 = a * a2 // gcd1

        a3 = array[i + 2]
        gcd2 = calc_gcd(a2, a3)
        lcm2 = a2 * a3 // gcd2

        if lcm1 <= lcm2:
            print(f"No2, lcm1 = {lcm1}, lcm2 = {lcm2}")
            return


    print(" ".join(map(str, array)))


if __name__ == '__main__':
    main()
0