社区讨论

这个标程有点...

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 条回复,欢迎继续交流。

正在加载回复...