社区讨论
这个标程有点...
P3927SAC E#1 - 一道中档题 Factorial参与者 4已保存回复 8
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 8 条
- 当前快照
- 1 份
- 快照标识符
- @mi6lndwr
- 此快照首次捕获于
- 2025/11/20 06:54 4 个月前
- 此快照最后确认于
- 2025/11/20 06:54 4 个月前
CPP
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int cnt;
ll n,k;
unsigned ll ans;
ll Count(ll u,ll v)
{
ll p = v;
ll res = 0;
while (p <= u) res += u / p, p *= v;
return res;
}
int main()
{
while (scanf("%lld%lld",&n,&k) != EOF)
{
ans = 4294967296LL * 2147483648LL - 1;//这里小坑
ll K = k;
for (ll i = 2; i * i <= k; ++i)
{
if (k % i == 0)
{
ll now = 0;
while (k % i == 0) now ++, k /= i;
if (ans == -1) ans = (unsigned ll)Count(n,i) / now;
else ans = min(ans, (unsigned ll)Count(n,i) / now);
}
}
if (k != 1)
if (ans == -1) ans = Count(n,k); else ans = min(ans,(unsigned ll )Count(n,k));
cout<<ans<<endl;
}
}
现场赛是学校里有课只看了两眼题,,打完之后交了一个复杂度sqrt(k)的算法(如你们所见),简简单单,根本不需要用质数表搞来搞去反而麻烦就90分了,极限数据662ms
而且这个90分我也很想吐槽,第四个点有一组数据1000000000000000000 1(10^18,1),本来一进制这种东西是不太应该出现,一出现的话0是无限大的,我本来想着没这种神奇的数据然后就90分了...以后比赛有必要公告一下什么的吧....
回复
共 8 条回复,欢迎继续交流。
正在加载回复...