zoukankan      html  css  js  c++  java
  • Wannafly挑战赛25 A 因子

    题目:
    令 X = n!, 给定一大于1的正整数p 求一个k使得 p ^k | X 并且 p ^(k + 1) 不是X的因子。

    (1e18>=n>=10000>=p>=2)

    思路:

    题意就是求n的阶乘中有多少个p,但是这里n很大,不能直接算,所以需要理解怎样简化这个问题

    先将问题简化成p是一个质数,对于一个n的阶乘,我们可以将他化为n的阶乘中含有的p的倍数相乘,然后再乘以其他不能被p整除的数相乘

    即n!=1*2*3*(...)*n,化简为n!=(p*2p*3p(...)*kp)*s(s为不能被p整除的数相乘后的数)  所以就可以得到最大值k=n/p。

    每次求出n的个数的和就是m!中因子n的总个数。*/

    #include <stdio.h>
    int main(void)
    {
    int N,n,m,count;
    scanf("%d",&N);
    while(N--)
    { count=0;
    scanf("%d%d",&n,&m);
    while(n)
    {
    n=n/m;
    count=count+n;
    }
    printf("%d
    ",count);
    
    }
    return 0;
    }
    然后进行拓展,对于p是一个正整数,只需要将p进行质因数分解,对于p的每一个质因数都进行一次判断,就行了
    #include <stdio.h>
    #include <iostream>
    #define INF 1e18+7
    using namespace std;
    bool a[10005];
    int b[10005];
    int size;
    void Init()
    {
        size =0;
        for(int i=2; i<=10005; i++)
        {
            if(a[i]==true) continue;
            b[size++]=i;
            if(a[i]==false)
            {
                for(int j=i*i; j<=10005; j+=i)
                {
                    a[j]=true;
                }
            }
        }
    }
    unsigned long long cnt1[10005],cnt2[10005];
    int main()
    {
        unsigned long long n;
        int a;
        cin>>n>>a;
        Init();
        for(int i=0; i<size; i++)
        {
            cnt1[i]=cnt2[i]=0;
        }
        for(int i=0; i<size; i++)
        {
            unsigned long long t=n;
            while(t)
            {
                cnt1[i]+=t/b[i];
                t=t/b[i];
            }
        }
        long long ans=INF;
        for(int i=0; i<size; i++)
        {
            while(a%b[i]==0)
            {
                cnt2[i]++;
                a/=b[i];
            }
            if(cnt2[i]==0) continue;
            if(cnt1[i]/cnt2[i]<ans) ans=cnt1[i]/cnt2[i];
        }
        cout<<ans<<endl;
        return 0;
    }
     
  • 相关阅读:
    Spring注解驱动开发3:自动装配
    Spring注解驱动开发2:生命周期和属性赋值
    Spring注解驱动开发1:组件注册
    Java线程及其实现方式
    Winform 可取消的单选按钮(RadioButton)
    autoit脚本-从基本的函数用法开始
    python进阶(一)
    dict字典的一些优势和劣势
    读《流畅的python》第一天
    智能化脚本autoit v3的简单了解
  • 原文地址:https://www.cnblogs.com/maybe96/p/10160317.html
Copyright © 2011-2022 走看看