個人覺得這是一道好題,用到了乙個我我熟悉的知識點。
題目鏈結
首先求出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 所...