結果
問題 |
No.3028 No.9999
|
ユーザー |
|
提出日時 | 2025-02-21 21:38:50 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 5 ms / 4,000 ms |
コード長 | 818 bytes |
コンパイル時間 | 3,994 ms |
コンパイル使用メモリ | 280,172 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2025-02-21 21:38:55 |
合計ジャッジ時間 | 4,749 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 23 |
ソースコード
// https://atcoder.jp/contests/abc222/submissions/26432513 #include<bits/stdc++.h> using namespace std; int pow(long long a,int n,int m){ long long ans=1; a%=m; while(n){ if(n%2)ans=ans*a%m; a=a*a%m; n/=2; } return (int)ans; } int inv(int a,int b){ if(a==1)return 1; return b+(1-(long long)b*inv(b%a,a))/a; } int ord(int a,int m){ a%=m; if(gcd(a,m)!=1)return -1; int sq=sqrt(m)+1; unordered_map<int,int>mp; for(long long s=a,i=1;i<=sq;i++,s=s*a%m)if(mp.find(s)==mp.end())mp[s]=i; long long g=inv(pow(a,sq,m),m),x=1; for(int k=0;k<=m/sq;k++,x=x*g%m)if(mp.find(x)!=mp.end())return sq*k+mp[x]; assert(0); } void solve(){ int m; cin >> m; if(m == 1){ cout << 1 << endl; return; } cout << ord(10,m) << endl; } int main(){ int n = 1; // cin >> n; while(n--)solve(); }