題目來自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)的,因此複雜度為o(logklogn),可以線性篩預處理素數通過。
#include#include+#include
#include
#include
#include
#include
using
namespace
std;
typedef
long
long
ll;const
int n=4e6+5
;const ll inf=9e18;
ll calc(ll n,ll p)
bool
he[n];
inttot;
ll su[n];
void euler(int
n) }
}ll n,k;
intmain()
}if(k>1)x=min(x,calc(n,k));
printf(
"%lld\n
",x);
}return0;
}
LOJ 6303 水題 約數 質因數
給定正整數 n,kn,kn,k,已知非負整數 xx x 滿足 n modkx 0,求 xmaxx x max 本題包含多組資料,請處理至檔案末尾。對於每組資料,共有一行,兩個整數,表示 n,kn,kn,k。對於每組資料,輸出一行,乙個整數,表示 xmaxx x max 輸入樣例 10 2 50000...
LOJ6087 毒瘤題 題解
n 個數的陣列,其中恰好有 k 個數出現了奇數次。把他們找出來。n 3e6,k 2 空間 2m k 1 直接全部異或起來。k 2 假設出現奇數次的是 a 和 b,那麼把所有數異或起來得到的就是 s a b。對每個二進位制位維護乙個數 w i 當讀入乙個 x,x 的第 j 位為 1 的時候,就把 w ...
題解 牛客 114514 水題
給你乙個長為n的序列 定義乙個序列下標的子集為先輩,當且僅當選出的這些下標對應的序列值的乘積為114514,而且因為只有乙隻野獸,所以有個要求是選出來的這些下標所對應的序列值最多有乙個1 請輸出有多少先輩 第一行乙個數表示n 之後一行n個數表示這個序列 n 229028,序列的值域在 0,11451...