九度 oj 題目1104 整除問題

2021-07-26 14:16:46 字數 1071 閱讀 2589

1.2.

有兩種做法:

第一種做法,把n!做素數分解,用cnt1[i]代表n!中含有的primes[i]的因子個數:如果n/primes[i] == x, 那麼在n!中就有x個數含有primes[i]為它的因子,但是這x個數中有的數含有多個primes[i]為它的因子,所以還需要不斷的做 cnt1[i] += x/primes[i], x= x/primes[i],直到x == 0。

具體對應**:

while(t)

用cnt2[i] 代表a中含有primes[i]的因子個數。

k值為cnt1[i]/cnt2[i]的最大值。

#include #include using namespace std;

int primes[1001];

int primenum;

bool temp[1001];

void init()

for(int i =2; i<=1000;i++)

} primenum = 0;

for(int i=2;i<=1000;i++) }}

int main(int argc, char* argv)

ans = 0x7fffff;

for(int i=0;i

第二種做法是:

在算n!的時候同時算出k,因為只要factor %a ==0 那麼factor=factor/a, k++; 又因為當factor不可以%a==0 時, factor = ma + x。 其中ma是肯定可以被a整除的,i*ma也會被a整除,所以在繼續算factor時ma部分不會影響factor%a=0, 所以可以將這部分捨掉,factor = factor%a。

#include int main()

//factor = ma + x, ma will not help to increase k

//delete ma to prevent overflow

factor = factor % a;

} printf("%d\n",k);

} }

九度題目1104整除問題

先篩選出1000以內的所有素數 計算出a各個素數因子的冪數 計算出n 的各個素數因子的冪數 用n分別除以各素數因子的1次冪 2次冪 累加在一起 用n 的因子指數分別除以a的因子指數,取其中的最小值即為k include int prime 1001 bool mark 1001 int primes...

九度OJ 1104 整除問題

我的思路就是分別將n,a進行分解質因數並把冪次儲存在兩個power陣列裡,然後按照a的質因數去遍歷,計算每個質因數p的 在n中冪次 在a中冪次 的比值,比值中最小的即為k。機試指南上提供了另一種高效得多的演算法,真是相形見絀啊 皿 題目描述 給定n,a求最大的k,使n!可以被a k整除但不能被a k...

題目1104 整除問題

對n!以及a進行分解質因素,如果a的質因素的冪小於等於n!的質因素的冪,則可以整除。求符合要求裡最大的。1.求1 1000之間的素數 素數篩法,獲得乙個素數時,將它的所有倍數標記為非素數。當遍歷到乙個數時,沒有被任何小於它的素數標記為非素數,則確定其為素數。void ini1104 2.對於階乘!n...