LOJ 6303 水題 約數 質因數

2022-05-01 13:18:09 字數 1880 閱讀 3580

給定正整數 n,kn, kn,

k,已知非負整數 xx

x 滿足 n

!modkx

=0,求 xmaxx_x​

max​

​ 。本題包含多組資料,請處理至檔案末尾。

對於每組資料,共有一行,兩個整數,表示 n,kn, kn,

k。對於每組資料,輸出一行,乙個整數,表示 xmaxx_x​

max​

​。輸入樣例

10 2

5000000000000000000 2

5000000000000000000 10000000000000

輸出樣例

8

4999999999999999981

96153846153846153

對於 40%40\%40

% 的資料,k⩽2×107k \leqslant 2\times 10^7k⩽

2×10

​7​​

,n⩽2×109n \leqslant 2\times 10^9n⩽

2×10

​9​​

,資料組數 ⩽50 \leqslant 50⩽5

0。對於 100%100\%10

0%的資料,11

10​1

3​​,1⩽n⩽5×10181 \leqslant n \leqslant 5\times 10^1⩽

n⩽5×

10​1

8​​,資料組數 ⩽200\leqslant 200⩽2

00。

由n!%kx=0可得:k^x必定是n!的乙個約數,所以k中的質因數在$n!$肯定都存在,只是k中質因子的指數小於等於n!中的質因子的指數。

假如我們現在已經知道了k的每個質因數及其指數:p1

c1 p2

c2... pmcm

我們還知道n!的每個質因子及其指數:p1

d1p2

d2 ...pm

dm那麼可以得到:

$c1*x_1<=d1$$c_2*x_2<=d_2$ ... $c_m*x_m<=d_m$

可以知道$$min$$便是滿足條件的最大的x。

現在將問題轉換為求k和n!的質因數及其指數了。

對於k的質因數和指數我們可以在$\sqrt$的時間內求得,

而n!可以在$\log*\sqrt$的時間內得到。

#includeusing

namespace

std;

#define uint unsigned int

#define re register int

#define ll long long

#define inf 0x3f3f3f3f

#define maxn 5000009

#define maxminline ll read()

while(ch>='

0'&&ch<='9')

return x*f;

}bool

v[maxn];

ll prime[maxn];

ll n,m,k,ans,tot,cnt;

void

prime()

}}ll cal(ll x,ll y)

intmain()

}if(k!=1

) ans=min(ans,cal(n,k));

printf(

"%lld\n

",ans);

}fclose(stdin);

fclose(stdout);

return0;

}

數論

數論

LOJ6303 水題 題解

題目來自loj。就記乙個公式,設f n,k 為n 裡分解得到的k k為質數 的個數,則f n,k f n k,k n k。證明很好證,顯然我們要的只有k,k 2,k 3 這樣的數有n k個,然後往下遞迴即可。至於k為合數,就質因數分解做就行。k的質因子最多o logk 個,遞迴顯然是o logn 的...

LOJ 6165 一道水題(線性篩)

題目鏈結 題解 很顯然的做法就是求 1,n 所有數的最小公倍數 所以我們只需要把 1,n 中的每個素因子的最高次冪提取出來連乘即可 剛開始沒看到模數是1e8 7,被坑了一次wa ac pragma gcc optimize 2 include using namespace std typedef ...

字尾陣列水水水水水水題

首先 jxrjxrjxr orz,沒有您我們都會死 然後就是我從jxr神犇那裡借鑑 照抄 過來的字尾陣列模板。include include include define cmp x y sa i x y sa i 1 x using namespace std const int n 100000...