結果
| 問題 | No.2249 GCDistance | 
| コンテスト | |
| ユーザー |  titia | 
| 提出日時 | 2023-03-17 22:40:26 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                TLE
                                 
                            (最新) 
                                AC
                                 
                            (最初) | 
| 実行時間 | - | 
| コード長 | 1,187 bytes | 
| コンパイル時間 | 342 ms | 
| コンパイル使用メモリ | 81,820 KB | 
| 実行使用メモリ | 232,940 KB | 
| 最終ジャッジ日時 | 2024-09-18 11:47:32 | 
| 合計ジャッジ時間 | 18,566 ms | 
| ジャッジサーバーID (参考情報) | judge5 / judge1 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 1 | 
| other | AC * 1 TLE * 9 | 
ソースコード
import sys
input = sys.stdin.readline
# エラトステネスの篩を用いた素因数分解・約数列挙
MAX=10**7+10 # 使いたい最大値を指定
# Sieve[i]で、iの最も小さい約数を返す。
Sieve=[i for i in range(MAX)]
for i in range(2,MAX):
    if Sieve[i]!=i:
        continue
    
    for j in range(i,MAX,i):
        if Sieve[j]==j:
            Sieve[j]=i
# 素因数分解
def fact(x):
    D=dict()
    while x!=1:
        k=Sieve[x]
        if k in D:
            D[k]+=1
        else:
            D[k]=1
        x//=k
    return D
# 約数列挙
def faclist(x):
    LIST=[1]
    while x!=1:
        k=Sieve[x]
        count=0
        while x%k==0:
            count+=1
            x//=k
        LIST2=[]
        for l in LIST:
            for i in range(1,count+1):
                LIST2.append(l*k**i)
        LIST+=LIST2
    return LIST
def euler_totient(x):
    FACT=fact(x)
    ANS=x
    for f in FACT:
        ANS=ANS*(f-1)//f
    return ANS
ANS=[0]*(10**7+10)
for i in range(2,10**7+1):
    k=euler_totient(i)
    ANS[i]=ANS[i-1]+i-1+(i-1-k)
#print(ANS[:10])
T=int(input())
for tests in range(T):
    N=int(input())
    print(ANS[N])
    
            
            
            
        