题解 | 阶乘分解

阶乘分解

https://ac.nowcoder.com/acm/contest/1021/B

挺水的一题...了解阶乘的定义就可以做了。
因为阶乘是连着乘下去的,所以对于一个,它的出现次数就是,对于的出现次数是,不过有一半的数在处被算过了那个不能乘上去。将枚举到即可。效率是
注意开long long

#include <bits/stdc++.h>
using namespace std;

const int N = 1e6 + 10;
int p[N], vis[N], cnt, n;

int main() {
    scanf("%d", &n);
    for(int i = 2; i <= n; ++i) {
        if(!vis[i]) p[++cnt] = i;
        for(int j = 1; j <= cnt && i * p[j] <= n; ++j) {
            vis[i * p[j]] = 1;
            if(i % p[j] == 0) break;
        }
    }
    for(int i = 1; i <= cnt; ++i) {
        long long tot = 0;
        for(long long j = p[i]; j <= n; j *= 1LL * p[i]) tot += 1LL * n / j;
        printf("%d %lld\n", p[i], tot);
    }
}
全部评论

相关推荐

06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
点赞 评论 收藏
分享
醉蟀:你不干有的是人干
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务