hdu 求n!是否能被m整除

2021-06-21 21:18:07 字數 1202 閱讀 5038

個人覺得這是一道好題,用到了乙個我我熟悉的知識點。

題目鏈結

首先求出m的所有質因子(p1,p2......pk)及其個數(s1s,s2........sk),然後再求n階乘中的因子(p1,p2.....pk)個數是否大於(s1,s2.......sk)

問題的關鍵在於如何求n!中的質因子pi的個數,請看下面 **

int sum = 0;while(n/pi) ; 這裡sum就是質因子pi的個數,為什麼自己想吧,嘿嘿,其實我自己也不清楚

下面是題目的**:

#include#include#include#include#include#include#include#include#include#include#include#include#define n 100000

#define eps 1e-9

#define pi acos(-1.0)

#define p system("pause")

using namespace std;

int prime[n+10],vis[n+10];

void sieve(int n)

int gen_primes(int n)

struct node

}s[n+10];

int main()

//避免除0溢位,導致runtime error

int tot = 0 ,i,j;

int mm = m;

for(i = 0; i < c && m > 1 && prime[i] <= m; i++)

if(m % prime[i] == 0)

tot++;

}if(m > 1)

int nn;

int flag = 1;

if(s[tot-1].x > n)

for(i = 0; i < tot && flag; i++)

if(sum < s[i].k) flag = 0;

} if(flag) printf("%d divides %d!\n",mm,n);

else printf("%d does not divide %d!\n",mm,n);

}

// p;

return 0;

}

判定某個整數是否能被7整除

乙個n位數能被7整除當且僅當它的前n 1位減去最後一位的兩倍能被7整除。看8638能否被7整除,只需要看 863 8 2 847能否被7整除,繼續轉化為 84 7 2 70,因此8638能被7整除。首先我們把數從個位開始往左邊每兩個數字分為一組 再從左開始 一加一減找餘數 然後把找到的餘數從右往左讀...

判斷乙個整數是否能被11整除

如果乙個整數在整型範圍內,直接用求餘符號就能搞定,但是如果這個整數比較大就要另尋他路了。有一種演算法叫做 奇偶位差法 意思就是在奇數字上的數字和與偶數字上的數字和做差,如果這個差的絕對值能被11整除,那麼這個數字就可以被11整除。include include includeint main if ...

n 10 18是否能被乙個數的平方整除

問n 10 18是否能被乙個數的平方整除 將n分解為 p1p2pk 其中pi為素數,且pi pi 1 這裡可以等於 若n能被乙個數的平方整除,它肯定能被乙個素因子的平方p 2整除,我們找到最小的這個p即可 1.如果p不是最後的素因子,在p之後的素數pi p,這時就有n p 3了,即p n 1 3 所...