結果
| 問題 |
No.774 tatyamと素数大富豪
|
| コンテスト | |
| ユーザー |
ahe100
|
| 提出日時 | 2019-03-19 19:32:36 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 1,325 ms / 2,000 ms |
| コード長 | 1,242 bytes |
| コンパイル時間 | 1,886 ms |
| コンパイル使用メモリ | 169,684 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-09-14 04:52:25 |
| 合計ジャッジ時間 | 6,178 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 14 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
typedef signed long long ll;
#define rep(i,n) for(int i = 0;i<((int)(n));i++)
#define reg(i,a,b) for(int i = ((int)(a));i<=((int)(b));i++)
#define irep(i,n) for(int i = ((int)(n)-1);i>=0;i--)
#define ireg(i,a,b) for(int i = ((int)(b));i>=((int)(a));i--)
typedef pair<ll, ll> mp;
/*
*/
// ミラーラビン
ll modpow(__int128_t a, ll n, ll mo) {
__int128_t r=1;
a%=mo;
while(n) r=r*((n%2)?a:1)%mo,a=a*a%mo,n>>=1;
return r;
}
bool MillerRabin(ll v,int loop=10) {
ll d=v-1;
int s=0,t;
if(v<=1) return false;
if(v==2) return true;
if(v%2==0) return false;
while(d%2==0) d/=2,s++;
rep(i,loop) {
ll a=abs(1LL*rand()*rand()+rand())%(v-2)+1;
ll r=modpow(a,d,v);
if(r==1 || r==v-1) continue;
t=s;
rep(j,s) {
r=modpow(r,2,v);
if(r==v-1){
t=j;
break;
}
}
if(t==s) return false;
}
return true;
}
ll n,a[10],ans=-1;
int main(void){
cin>>n;
rep(i,n)cin>>a[i];
vector<int> v(n);
iota(v.begin(), v.end(), 0);
do{
ll dig=1,t=0;
for(auto x : v){
t+=dig*a[x];
if(a[x]>=10){
dig*=100;
}else{
dig*=10;
}
};
if(ans<t && MillerRabin(t,30)){
ans=t;
}
}while( next_permutation(v.begin(), v.end()) );
cout<<ans<<endl;
return 0;
}
ahe100