結果
| 問題 | 
                            No.1946 ロッカーの問題
                             | 
                    
| コンテスト | |
| ユーザー | 
                             | 
                    
| 提出日時 | 2022-05-26 19:20:43 | 
| 言語 | PyPy3  (7.3.15)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 2,484 ms / 3,000 ms | 
| コード長 | 676 bytes | 
| コンパイル時間 | 221 ms | 
| コンパイル使用メモリ | 82,176 KB | 
| 実行使用メモリ | 108,160 KB | 
| 最終ジャッジ日時 | 2024-09-20 15:05:47 | 
| 合計ジャッジ時間 | 17,901 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge5 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 19 | 
ソースコード
n,m=map(int,input().split())
a=list(map(int,input().split()))
lis=[1]*(n+1)
def make_divisors(n):
    lower_divisors,upper_divisors=[],[]
    i=1
    while i*i<=n:
        if n%i==0:
            lower_divisors.append(i)
            if i!=n//i:
                upper_divisors.append(n//i)
        i+=1
    return lower_divisors+upper_divisors[::-1]
for i in range(1,n+1):
    div=make_divisors(i)
    for num in div:
        lis[num]=1-lis[num]
lis2=[1]*(n+1)
for i in range(m):
    lis2[a[i]]=0
ans=0
for i in range(n,0,-1):
    if lis[i]!=lis2[i]:
        ans+=1
        l=make_divisors(i)
        for j in l:
            lis[j]=1-lis[j]
    else:
        continue
print(ans)