阶乘
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
ll a[N];
ll b[N];
ll p,t,len;
ll cal(ll x,ll mid){
ll num=0;
while(mid>=x){
num+=mid/x;
mid/=x;
}
return num;
}
bool check(ll mid){
for(int i=0;i<len;i++){
if(cal(a[i],mid)<b[i]) return false;
}
return true;
}
int main(){
cin>>t;
while(t--){
cin>>p;
if(p==1){
cout<<1<<endl;
continue;
}
len=0;
for(ll i=0;i<2e5;i++) a[i]=0,b[i]=0;
for(ll i=2;i*i<=p;i++){
if(p%i==0){
while(p%i==0){
a[len]=i;
b[len]++;
p/=i;
}
len++;
}
}
if(p>1){
a[len]=p;
b[len]=1;
len++;
}
ll l=1,r=1e9;
ll ans=0;
while(l<=r){
ll mid=(l+r)>>1;
if(check(mid)) ans=mid,r=mid-1;
else l=mid+1;
}
cout<<ans<<endl;
}
return 0;
}
小石的签到题
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
if(n==1||n==3){
cout<<"Yang";
}else{
cout<<"Shi";
}
return 0;
}