結果
問題 | No.368 LCM of K-products |
ユーザー |
![]() |
提出日時 | 2016-04-04 13:16:45 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 78 ms / 2,000 ms |
コード長 | 2,430 bytes |
コンパイル時間 | 1,710 ms |
コンパイル使用メモリ | 177,036 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-09-22 14:40:49 |
合計ジャッジ時間 | 3,893 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 35 |
ソースコード
#include <bits/stdc++.h>#define _overload(_1,_2,_3,name,...) name#define _rep(i,n) _range(i,0,n)#define _range(i,a,b) for(int i=int(a);i<int(b);++i)#define rep(...) _overload(__VA_ARGS__,_range,_rep,)(__VA_ARGS__)#define _rrep(i,n) _rrange(i,n,0)#define _rrange(i,a,b) for(int i=int(a)-1;i>=int(b);--i)#define rrep(...) _overload(__VA_ARGS__,_rrange,_rrep,)(__VA_ARGS__)#define _all(arg) begin(arg),end(arg)#define uniq(arg) sort(_all(arg)),(arg).erase(unique(_all(arg)),end(arg))#define getidx(ary,key) lower_bound(_all(ary),key)-begin(ary)#define clr(a,b) memset((a),(b),sizeof(a))#define bit(n) (1LL<<(n))#define popcount(n) (__builtin_popcountll(n))template<class T>bool chmax(T &a, const T &b) { return (a<b)?(a=b,1):0;}template<class T>bool chmin(T &a, const T &b) { return (b<a)?(a=b,1):0;}using namespace std;using ll=long long;const ll mod=1000000007LL;inline ll extgcd(ll a,ll b,ll& x,ll& y){x=1,y=0;ll g=a;if(b!=0) g=extgcd(b,a%b,y,x),y-=a/b*x;return g;}inline ll ADD(const ll &a, const ll &b,const ll &mod) { return a+b<mod?a+b:a+b-mod;}inline ll SUB(const ll &a, const ll &b,const ll &mod) { return a-b>=0?a-b:a-b+mod;}inline ll MUL(const ll &a, const ll &b,const ll &mod) { return (1LL*a*b)%mod;}inline ll INV(ll a,ll mod){ll x,y;extgcd(a,mod,x,y);return (x%mod+mod)%mod;}inline ll DIV(const ll &a, const ll &b,const ll &mod) {return MUL(a,INV(b,mod),mod);}inline ll POW(ll a,ll n,ll mod){ll b=1LL;for(a%=mod;n;a=MUL(a,a,mod),n>>=1)if(n&1) b=MUL(b,a,mod); return b;}const int limit=40000;bool prime[limit+1];void init(){rep(i,limit) prime[i]=true;prime[0]=prime[1]=false;for(ll i=2;i*i<=limit;++i){if(prime[i])for(ll j=i*i;j<=limit;j+=i)prime[j]=false;}return;}ll a[1010];int main(void){init();int n,k;cin >> n >> k;rep(i,n) cin >> a[i];ll ans=1LL;ll factor[1010];for(int f=2;f<=limit;++f){if(prime[f]==false) continue;rep(i,n){factor[i]=0;while(a[i]%f==0) a[i]/=f,factor[i]++;}sort(factor,factor+n);reverse(factor,factor+n);ll sum=0LL;rep(i,k) sum+=factor[i];ans=MUL(ans,POW(f,sum,mod),mod);}map<ll,int> remain;rep(i,n){if(a[i]==1) continue;remain[a[i]]++;}for(auto &it:remain){ll index=min<ll>(it.second,k);ans=MUL(ans,POW(it.first,index,mod),mod);}cout << ans << endl;return 0;}// 考えられる危険なケース// big prime numbers// ソートの順番のミス