#eratosthenes#CH 3101 阶乘分解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sugar_free_mint/article/details/82024984

题目

N ! 质因数分解


分析

直接1到 N 试除法 O ( N N ) ,是会超时的,所以就尝试用质数筛一筛,那么对于每个质数p,个数就是

p k n N p k


代码

#include <cstdio>
int n,ans; bool v[501001]; long long t=2;
void print(int ans){if (ans>9) print(ans/10); putchar(ans%10+48);}
int main(){
    scanf("%d",&n);
    while (t<=n) ans+=n/t,t<<=1;
    putchar('2'); putchar(' '); 
    print(ans); putchar('\n'); ans=0;
    for (register int i=1;i<=n-1>>1;i++)
    if (!v[i]){
        t=i<<1|1; ans=0;
        while (t<=n) //求答案
            ans+=n/t,t=t*(i<<1|1);
        print(i<<1|1); putchar(' ');
        print(ans); putchar('\n');
            for (register int j=i;j<=n/(i<<1|1)>>1;j++)
                v[(i<<1|1)*(j<<1|1)>>1]=1;//神奇的筛法
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/sugar_free_mint/article/details/82024984