close

#include <stdio.h>
#include <string.h>
#include <math.h>
#define MAXN 100005

int vis[MAXN], prime[10000], num;

void get_prime()
{
    num = 0;
    memset(vis, 0, sizeof(vis));
    int i, j;
    for (i = 2; i < MAXN; i++)
    {
        if (!vis[i])
        {
            prime[num++] = i;
            for (j = i + i; j < MAXN; j += i)
                vis[j] = 1;
        }
    }
}

int Cal(int w, int p)
{
    int ans = 0;
    while (w)
    {
        w /= p;
        ans += w;
    }
    return ans;
}

int judge(int n, int m)
{
    int i;
    int k = (int)sqrt(m + 0.5);
    for (i = 0; i < num && prime[i] <= k; i++)
    {
        if (m % prime[i] == 0)
        {
            int cnt = 0;
            while (m % prime[i] == 0)
            {
                cnt++;
                m /= prime[i];
            }
            if (Cal(n, prime[i]) < cnt) return 0;
        }
    }
    if (m > 1 && n < m) return 0;
    return 1;
}

int main()
{
    int n, m;
    get_prime();
    while (scanf("%d %d", &n, &m) != EOF)
    {
        if (judge(n, m))
            printf("%d divides %d!\n", m, n);
        else
            printf("%d does not divide %d!\n", m, n);
    }
    return 0;
}

 

arrow
arrow
    文章標籤
    UVa C code
    全站熱搜
    創作者介紹
    創作者 蒼雨 的頭像
    蒼雨

    日常雜物間

    蒼雨 發表在 痞客邦 留言(0) 人氣()