1 条题解
-
0
Maxelement题解
对序列的所有元素应用欧拉降幂后排序即可。
$a^b \equiv \begin{cases} a^{b \bmod \varphi(m)}, & \gcd(a,m) = 1, \\ a^b, & \gcd(a,m)\ne 1, b < \varphi(m), \\ a^{(b \bmod \varphi(m)) + \varphi(m)}, & \gcd(a,m)\ne 1, b \ge \varphi(m). \end{cases} \pmod{m}$
#include<bits/stdc++.h> #define int long long using namespace std; using PII=std::pair<int,int>; using i64=long long; constexpr int euler(int n){ int ans=n; for(int i=2;i<=n/i;i++){ if(n%i!=0)continue; ans=ans/i*(i-1); while(n%i==0)n/=i; } if(n>1)ans=ans/n*(n-1); return ans; } constexpr int m=998244353; constexpr int phi=euler(m); constexpr int power(int a,int b,int m){ int res=1ll%m; while(b){ if(b&1)res=res*a%m; b>>=1; a=a*a%m; } return res; } int cal(){ int a,b=0;std::cin>>a; char c=std::cin.get(); while(!std::isdigit(c))c=std::cin.get(); bool flag=false; while(std::isdigit(c)){ b=b*10+(c-'0'); c=std::cin.get(); if(b>=phi)b%=phi,flag=true; } if(flag)b+=phi; int ans=power(a,b,m); return ans; } void solve(){ int n;std::cin>>n; std::vector<int> a; for(int i=0;i<n;i++){ a.push_back(cal()); } std::sort(a.begin(),a.end()); std::cout<<a.back(); } signed main(){ std::cin.tie(nullptr); std::ios::sync_with_stdio(false); std::cout<<std::fixed<<std::setprecision(10); int T=1; //std::cin>>T; while(T--)solve(); return 0; }
- 1
信息
- ID
- 356
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 15
- 已通过
- 6
- 上传者