zoukankan      html  css  js  c++  java
  • Faculty Dividing Powers

    http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=24019

    根据性质来求解

    任何一个合数都可以表示成几个质数的乘积,质数的乘积是本身。

    任何一个数都可以表示成几个素数的和,素数是他本身

    比如要算 10!可以最大整除除以2 的多少次方 

    a:10  9 8 7 6 5 4 3 2  1

    a列的数除以2 变为(取整)

    b:5 4 3 2 1

    同理得

    c:2 1

    那么ans=10/2+5/2+2/2

    可以这样考虑 因为是阶乘的,所以  这尼玛说不清了 看图吧 ,看看就明白了

    View Code
    #include<iostream>
    #include<string.h>
    #include<stdio.h>
    #include<algorithm>
    #define maxn 1200005
    #define ll long long
    #define inf ~0U>>1
    using namespace  std;
    int prime[maxn];
    int visit[6000000];
    int cnt=0;
    void init()
    {
        memset(visit,0,sizeof(visit));
        memset(prime,0,sizeof(prime));
        for(int i=2;i<=maxn;i++)
        {
            if(!visit[i])
            prime[++cnt]=i;
            for(int j=i+i;j<maxn;j+=i)
            {
                visit[j]=1;
            }
        }
    
    }
    ll go(ll n,ll k)
    {
        ll sum=0;
        while(n>=1)
        {
    
            n/=k;
            sum+=n;
        }
        return sum;
    }
    ll min(ll a, ll b )
    {
        return a<b?a:b;
    }
    void solve(ll n,ll k)
    {
         ll ans=inf;
         ans*=inf;
         ll num=0;
         int mm=1;
         for(int i=1;k>1&&k>prime[i]&&i<=cnt;i++)
         if(k%prime[i]==0)
         {
             mm=1;
             for(k/=prime[i];k%prime[i]==0;k/=prime[i])mm++;
             ans=min(ans,go(n,prime[i])/mm);//拿每一个算答案
    
         }
         if(k>1)
         ans=min(ans,go(n,k));//大于1还要算
         cout<<ans<<endl;
    }
    int main()
    {
        int test;
        cin>>test;
        ll n,k;
        init();
        while(test--)
        {
            cin>>n>>k;
            solve(n,k);
        }
        return 0;
    }
  • 相关阅读:
    [面试题]什么是面向对象编程
    面向对象编程的新手理解
    Object of type type is not JSON serializable
    STL---map
    STL---llist
    Div标签使用inline-block有间距
    STL---vector
    KMP算法
    算法06
    算法05
  • 原文地址:https://www.cnblogs.com/cs1003/p/2664762.html
Copyright © 2011-2022 走看看