zoukankan      html  css  js  c++  java
  • virtual hust 2013.6.21 NEFU 挑战编程----数论 D

    题目:Factovisors

    思路:直接质因式分解除数,然后求得阶乘各质因子的幂是否大于除数的,注意特判情况(存在一个较大的素数,这个要判断n是不是大于等于那个很大的素数)

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    #define maxn 60000
    bool vis[maxn];
    int prime[maxn];
    int cnt[maxn];
    int n_prime=0;
    void Prime()
    {
        memset(vis,true,sizeof(vis));
        vis[0]=vis[1]=0;
        for(int i=2;i<maxn;i++)
        {
            if(vis[i])
            {
                prime[++n_prime]=i;
                for(int j=2*i;j<maxn;j+=i)
                    vis[j]=0;
            }
        }
        //cout<<n_prime<<":"<<prime[n_prime]<<endl;
    }
    int get(int n,int factor)
    {
        int ans=0;
        int tmp=factor;
        while(tmp<=n)
        {
            ans+=n/tmp;
            tmp*=factor;
        }
        return ans;
    }
    bool is_ok(int n,int num)
    {
        memset(cnt,0,sizeof(cnt));
        for(int i=1;i<=n_prime;i++)
        {
            while(num%prime[i]==0)
            {
                num/=prime[i];
                cnt[i]++;
            }
        }
        cnt[0]=num;
        if(n<cnt[0]&&cnt[0]>1)
            return false;
        for(int i=1;i<=n_prime;i++)
        {
            if(cnt[i])
            {
                if(get(n,prime[i])<cnt[i])
                    return false;
            }
        }
        return true;
    }
    int main()
    {
        int n,num;
        Prime();
        while(scanf("%d%d",&n,&num)!=EOF)
        {
            if(is_ok(n,num))
                printf("%d divides %d!
    ",num,n);
            else
                printf("%d does not divide %d!
    ",num,n);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    NOIP2016 蚯蚓 题解
    BZOJ 1294 围豆豆 题解
    POJ1852 Ants 题解
    BZOJ 1131 [POI2008] STA-Station 题解
    HDU 5963 朋友 题解
    Codeforces 1292C Xenon's Attack on the Gangs 题解
    Emergency Evacuation 题解
    P4408 逃学的小孩 题解
    UVA11300 Spreading the Wealth 题解
    P2882 Face The Right Way G 题解
  • 原文地址:https://www.cnblogs.com/overflow/p/3148154.html
Copyright © 2011-2022 走看看