傳送門
拆開變成
\[\prod_^\sigma_0(i)^\prod_^\sigma_0(i)^
\]考慮 \(\prod_^\sigma_0(i)^\)
運用 \(\mu\) 的性質,設 \(c(i)\) 表示 \(i\) 的質數因子個數
那麼就是
\[\prod_^2^=2^^\mu(i)c(i)}
\]只需要設
\(f(x,j)\) 表示 \(1\) 到 \(x\) 最小質因子大於等於第 \(j\) 個質數的合數的 \(\mu(i)c(i)\) 的和
\(g(x,j)\) 表示 \(1\) 到 \(x\) 最小質因子大於等於第 \(j\) 個質數的合數的 \(\mu(i)\) 的和
預處理出 \(cntp(i)\) 表示 \(1\) 到 \(x\) 的質數個數就可以遞推了
這一部分直接 \(min25\) 篩即可
考慮 \(\prod_^\sigma_0(i)^\)
分開考慮每個質數的貢獻
設 \(s(n,p,k)\) 表示 \(1\) 到 \(n\) 中只含有 \(p^k\) 這個因子不含 \(p^i,i\ne k\) 的數的和
設 \(p\) 為質數集合
那麼\[\prod_^\sigma_0(i)^=\prod_\prod_(k+1)^
\]設 \(sum(x)=\sum_^i\)
那麼\[s(n,p,k)=p^ksum(\lfloor\frac\rfloor)-p^sum(\lfloor\frac}\rfloor)
\]當 \(p\le \sqrt\) 的時候直接暴力計算
當 \(p > \sqrt\) 的時候,顯然 \(k\) 最多就是 \(1\)
那麼\[s(n,p,k)=psum(\lfloor\frac\rfloor)
\]\(min25\) 篩預處理出 \(s(x)\) 表示 \(1\) 到 \(x\) 的質數的和,然後數論分塊即可
注意常數優化qwq
# include using namespace std;
typedef long long ll;
const ll mod(1e12 + 39);
const ll phi(1e12 + 38);
const int maxn(1e6 + 5);
inline ll mul1(ll x, ll y)
inline ll mul2(ll x, ll y)
inline ll pow(ll x, ll y)
inline void inc1(ll &x, ll y)
inline void inc2(ll &x, ll y)
inline ll dec1(ll x, ll y)
inline ll dec2(ll x, ll y)
int test, pr[maxn], tot, d, id1[maxn], id2[maxn], cnt;
ll n, val[maxn], cntp[maxn], f[maxn], g[maxn], s[maxn], sp[maxn];
bitset ispr;
# define id(x) ((x) <= d ? id1[x] : id2[n / (x)])
inline ll sum1(ll x)
inline ll sum2(ll x)
inline ll getsum(ll x, ll v1, ll v2)
inline void solve()
for (i = 1; i <= tot && pr[i] <= n / pr[i]; ++i)
for (j = 1; j <= cnt && pr[i] <= val[j] / pr[i]; ++j)
for (--i; i; --i)
for (j = 1; j <= cnt && pr[i] <= val[j] / pr[i]; ++j)
for (i = 1; i <= cnt; ++i) inc2(f[i], phi - cntp[i]);
ans1 = pow(2, f[id(n)]), ans2 = 1;
for (i = 1; i <= tot && pr[i] <= n / pr[i]; ++i)
for (j = 1, v = pr[i]; v <= n; v = v * pr[i], ++j) ans2 = mul1(ans2, pow(j + 1, getsum(n, v, v * pr[i])));
for (lst = sp[i - 1], ret = 0, i = pr[i]; i <= n; i = j + 1)
ans2 = mul1(ans2, pow(2, ret)), printf("%lld\n", mul1(ans1, ans2));
}int main()
} scanf("%d", &test);
while (test) scanf("%lld", &n), solve(), --test;
return 0;
}
51NOD1965 奇怪的式子 min 25篩
給你 n 求 prod n 對 39 取模。sigma 0 i 表示約數個數。把式子拆成兩部分 prod n prod n prod n 先看前面這部分 begin s n sum ni frac prod n sigma 0 i i prod prod p s frac prod prod p s...
51 nod 最高的獎勵
有n個任務,每個任務有乙個最晚結束時間以及乙個對應的獎勵。在結束時間之前完成該任務,就可以獲得對應的獎勵。完成每乙個任務所需的時間都是1個單位時間。有時候完成所有任務是不可能的,因為時間上可能會有衝突,這需要你來取捨。求能夠獲得的最高獎勵。input 第1行 乙個數n,表示任務的數量 2 n 500...
51Nod 1241 特殊的排序
題目傳送門 分析 之前想的是求lis,後面發現這組資料會出問題 3 1 2 4 5 6。其實這裡的lis還應當滿足前後兩個元素的值相差為1。比如上面的最長子串行為 3 4 5 6,而不是1 2 4 5 6。即只需移動1 2即可。即如果n個數最長連續上公升子串行 這裡的連續指數值上連續,即前後相差1 ...