注意题目中一旦有大于 1e9 的数字, 所有变量全用 Longlong 替代, 包括 i,j
或者一开始直接 define int longlong , 然后之后主函数用 int32_t, 输入输出用 int32_t 替代
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- const ll INF=1e18+7;
- ll p[1000010];
- ll c[1000010];
- ll res=INF;
- int main()
- {
- ll n,x;
- scanf("%lld%lld",&n,&x);
- if(n==1)
- {
- printf("0\n");
- return 0;
- }
- int m=0;
- for(int i=2;1LL*i*i<=x;i++)// 一旦出现大于 10^9 的数字, 所有变量 (包括 i,j 都要用 long long), 惨痛的教训
- {
- printf("%d\n",i);
- if(x%i==0){
- p[++m]=i,c[m]=0;
- while(x%i==0) x/=i,c[m]++;
- }
- }
- if(x>1) p[++m]=x,c[m]=1;
- int tot=0;
- //printf("***\n");
- for(int i=1;i<=m;i++)
- {
- ll tmpn=n;
- ll num=0;
- //printf("****\n");
- while(tmpn)
- {
- //printf("%d\n",++tot);
- num+=tmpn/p[i];
- tmpn/=p[i];
- }
- num/=c[i];
- res=min(num,res);
- }
- printf("%lld\n",res);
- }
来源: http://www.bubuko.com/infodetail-2950116.html