結果
問題 |
No.3233 順列判定
|
ユーザー |
👑 |
提出日時 | 2024-02-12 21:40:49 |
言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 56 ms / 1,000 ms |
コード長 | 724 bytes |
コンパイル時間 | 2,163 ms |
コンパイル使用メモリ | 197,376 KB |
最終ジャッジ日時 | 2025-02-19 05:47:31 |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 40 |
ソースコード
#include <bits/stdc++.h> using namespace std; int main(){ int N; cin >> N; int M; cin >> M; set<int> S{}; for( int i = 1 ; i <= N ; i++ ){ // iのM乗をNで割った余りを繰り返し2乗法で計算する。 // int型だと計算途中でオーバーフローするのでlong long型を使う。 long long i_M = 1; long long power = i % N; int exponent = M; while( exponent > 0 ){ if( exponent % 2 == 1 ){ i_M = ( i_M * power ) % N; } power = ( power * power ) % N; exponent = exponent / 2; } S.insert( i_M ); } // Sの要素数がNの時"Yes"、そうでない時"No"を出力する。 cout << ( int( S.size() ) == N ? "Yes" : "No" ) << endl; }