結果
問題 |
No.3233 順列判定
|
ユーザー |
👑 |
提出日時 | 2024-02-12 21:46:17 |
言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 27 ms / 1,000 ms |
コード長 | 679 bytes |
コンパイル時間 | 2,153 ms |
コンパイル使用メモリ | 192,784 KB |
最終ジャッジ日時 | 2025-02-19 05:47:39 |
ジャッジサーバーID (参考情報) |
judge3 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 40 |
ソースコード
#include <bits/stdc++.h> using namespace std; int main(){ int N; cin >> N; int M; cin >> M; int H[N] = {}; 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; } if( H[i_M] != 0 ){ cout << "No" << endl; return 0; } H[i_M]++; } cout << "Yes" << endl; }