3281: 喵喵的数学难题

3281: 喵喵的数学难题

最近,喵喵一直在学习数学。他发现了,任意一个正整数N,都可以被一素数整除。
发现了这个结论的他特别高兴。有一天,lls给了喵喵一个数字N,
一本正经地告诉他:“你能求所有能整除N!的素数和其相应的数量吗?”
喵喵想了想说:“直接算不就好了嘛~”
lls笑了笑说:“小老弟你还是太年轻~”
你能帮助喵喵顺利求解这个问题吗?
输入
一个整数N (1≤N≤10^5)
输出
所有能整除N!的素数和其数量,共若干行,每行一对pi, ni,按照pi从小到大的顺序输出。
样例输入

5

样例输出

2 3
3 1
5 1

http://202.194.119.110/problem.php?id=3281

#include<bits/stdc++.h>

using namespace std;
int pi[100005];
int main()
{
    memset(pi,0,sizeof(pi));
    int n;
    cin>>n;
    for(int i=2;i<=n;i++)
    {
        int a=i;
        for(int j=2;j*j<=i;j++)// j*j<=i   x=j因为 保证所有的质因子都能取到,,i这个状态时,j*j=i,,i/=j  i变小了,变小后的i取根号 得到的值会比x小
        {
            while(a%j==0)
            {
                pi[j]++;
                a/=j;
            }

        }                  //  剩下的一定是质因子  如果不能让 x前面的数消化掉,,说明剩下的质因子,会比x大。
        if(a>1)
                pi[a]++;
    }

    for(int i=1;i<=n;i++)
    {
        if(pi[i]>0)
            cout<<i<<" "<<pi[i]<<endl;  // 放心打印,,因为1---n的所有数 都可以写成质数的乘积,,这里数组的下标是合数的值是0
    }

    return 0;
}


猜你喜欢

转载自blog.csdn.net/weixin_42820722/article/details/82318891
今日推荐