传送门

拆开变成

\[\prod_{i=1}^{n}\sigma_0(i)^{\mu(i)}\prod_{i=1}^{n}\sigma_0(i)^{i}
\]

考虑 \(\prod_{i=1}^{n}\sigma_0(i)^{\mu(i)}\)

运用 \(\mu\) 的性质,设 \(c(i)\) 表示 \(i\) 的质数因子个数

那么就是

\[\prod_{i=1}^{n}2^{\mu(i)c(i)}=2^{\sum_{i=1}^{n}\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_{i=1}^{n}\sigma_0(i)^{i}\)

分开考虑每个质数的贡献

设 \(s(n,p,k)\) 表示 \(1\) 到 \(n\) 中只含有 \(p^k\) 这个因子不含 \(p^i,i\ne k\) 的数的和

设 \(P\) 为质数集合

那么

\[\prod_{i=1}^{n}\sigma_0(i)^{i}=\prod_{p\in P}\prod_{k=1}(k+1)^{s(n,p,k)}
\]

设 \(Sum(x)=\sum_{i=1}^{x}i\)

那么

\[s(n,p,k)=p^kSum(\lfloor\frac{n}{p^k}\rfloor)-p^{k+1}Sum(\lfloor\frac{n}{p^{k+1}}\rfloor)
\]

当 \(p\le \sqrt{n}\) 的时候直接暴力计算

当 \(p > \sqrt{n}\) 的时候,显然 \(k\) 最多就是 \(1\)

那么

\[s(n,p,k)=pSum(\lfloor\frac{n}{p}\rfloor)
\]

\(min25\) 筛预处理出 \(S(x)\) 表示 \(1\) 到 \(x\) 的质数的和,然后数论分块即可

注意常数优化QwQ

# include <bits/stdc++.h>
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) {
register ll ret = x * y - (ll)((long double)x / mod * y + 0.5) * mod;
return ret < 0 ? ret + mod : ret;
} inline ll Mul2(ll x, ll y) {
register ll ret = x * y - (ll)((long double)x / phi * y + 0.5) * phi;
return ret < 0 ? ret + phi : ret;
} inline ll Pow(ll x, ll y) {
register ll ret = 1;
for (; y; y >>= 1, x = Mul1(x, x))
if (y & 1) ret = Mul1(ret, x);
return ret;
} inline void Inc1(ll &x, ll y) {
x = x + y >= mod ? x + y - mod : x + y;
} inline void Inc2(ll &x, ll y) {
x = x + y >= phi ? x + y - phi : x + y;
} inline ll Dec1(ll x, ll y) {
return x - y < 0 ? x - y + mod : x - y;
} inline ll Dec2(ll x, ll y) {
return x - y < 0 ? x - y + phi : x - 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 <maxn> ispr; # define ID(x) ((x) <= d ? id1[x] : id2[n / (x)]) inline ll Sum1(ll x) {
return (x & 1) ? Mul1(x, (x + 1) / 2) : Mul1(x / 2, x + 1);
} inline ll Sum2(ll x) {
return (x & 1) ? Mul2(x, (x + 1) / 2) : Mul2(x / 2, x + 1);
} inline ll GetSum(ll x, ll v1, ll v2) {
return Dec2(Mul2(v1, Sum2(x / v1)), Mul2(v2, Sum2(x / v2)));
} inline void Solve() {
while (cnt) f[cnt] = g[cnt] = 0, cnt--;
register ll i, j, id, ans1, ans2, v, ret, lst, cur;
for (d = sqrt(n), i = 1; i <= n; i = j + 1) {
j = n / (n / i), val[++cnt] = n / i;
val[cnt] <= d ? id1[val[cnt]] = cnt : id2[j] = cnt;
cntp[cnt] = val[cnt] - 1, s[cnt] = Sum2(val[cnt]) - 1;
}
for (i = 1; i <= tot && pr[i] <= n / pr[i]; ++i)
for (j = 1; j <= cnt && pr[i] <= val[j] / pr[i]; ++j) {
id = ID(val[j] / pr[i]), cntp[j] -= cntp[id] - i + 1;
Inc2(s[j], Mul2(pr[i], Dec2(sp[i - 1], s[id])));
}
for (--i; i; --i)
for (j = 1; j <= cnt && pr[i] <= val[j] / pr[i]; ++j) {
id = ID(val[j] / pr[i]);
v = Dec2(cntp[id] - i, g[id]), Inc2(g[j], v);
Inc2(v, cntp[id] - i), Inc2(f[j], Dec2(v, f[id]));
}
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) {
j = n / (n / i);
Inc2(ret, Mul2(Dec2(cur = s[ID(j)], lst), Sum2(n / i))), lst = cur;
}
ans2 = Mul1(ans2, Pow(2, ret)), printf("%lld\n", Mul1(ans1, ans2));
} int main() {
register int i, j;
ispr[1] = 1;
for (i = 1; i < maxn; ++i) {
if (!ispr[i]) pr[++tot] = i, sp[tot] = (sp[tot - 1] + i) % phi;
for (j = 1; j <= tot && i * pr[j] < maxn; ++j) {
ispr[i * pr[j]] = 1;
if (!(i % pr[j])) break;
}
}
scanf("%d", &test);
while (test) scanf("%lld", &n), Solve(), --test;
return 0;
}

51NOD1965:奇怪的式子的更多相关文章

  1. [51nod1965]奇怪的式子

    noteskey 怎么说,魔性的题目...拿来练手 min_25 正好...吧 首先就是把式子拆开来算贡献嘛 \[ANS=\prod_{i=1}^n \sigma_0(i)^{\mu(i)} \pro ...

  2. 51nod1965. 奇怪的式子(min_25筛)

    题目链接 http://www.51nod.com/Challenge/Problem.html#!#problemId=1965 题解 需要求的式子显然是个二合一形式,我们将其拆开,分别计算 \(\ ...

  3. 【51nod1965】奇怪的式子

    Portal --> 51nod1965 Solution 怎么说呢..这题..做的有点痛苦.. 首先看这个式子长得..比较奇怪,指数里面那个加号有点烦人,而且这个函数不是一个积性函数也有点烦人 ...

  4. 【51NOD1965】奇怪的式子 min_25筛

    题目描述 给你\(n\),求 \[ \prod_{i=1}^n{\sigma_0(i)}^{i+\mu(i)} \] 对\({10}^{12}+39\)取模. \(\sigma_0(i)\)表示约数个 ...

  5. 51nod 1965 奇怪的式子 —— min_25筛

    题目:http://www.51nod.com/Challenge/Problem.html#!#problemId=1965 推式子就同这里:https://www.cnblogs.com/yoyo ...

  6. 51nod 1965 奇怪的式子——min_25筛

    题目:http://www.51nod.com/Challenge/Problem.html#!#problemId=1965 考虑 \( \prod_{i=1}^{n}\sigma_0^i \) \ ...

  7. light oj 1236 分解质因数

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=70017#problem/H 题意:求满足1<=i<=j<=n ...

  8. BZOJ 1045 糖果传递

    奇怪的式子.最后发现取中位数. #include<iostream> #include<cstdio> #include<cstring> #include< ...

  9. BZOJ3456城市规划

    题目描述 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了.刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得整个国家的任意两个城市都直接或间接的连通.为了 ...

随机推荐

  1. AI 的下一个重大挑战:理解语言的细微差别

    简评:人类语言非常博大精妙,同一句话在不同的语境下,就有不同的含义.连人类有时候都不能辨别其中细微的差别,机器能吗?这就是人工智能的下一个巨大挑战:理解语言的细微差别.本文原作者是 Salesforc ...

  2. 使用HBuilderX实现打包vue项目成app

    一.准备开发工具 开发工具:HBuilderX 官网地址:http://www.dcloud.io (标准版需要自己安装插件,app开发版已经把app开发常用的插件安装好了,开箱即用,建议使用开发版) ...

  3. 初学Oracle

    初学Oracle,遇到了很多的问题,下载的是Oracle11g,没有找到合适的管理工具,所以用sql plus 创建表,以下是本人总结的一些sql plus的命令行的命令,希望对大家有用 与sql p ...

  4. 后序线索化二叉树(Java版)

    前面介绍了前序线索化二叉树.中序线索化二叉树,本文将介绍后序线索化二叉树.之所以用单独的一篇文章来分析后序线索化二叉树,是因为后序线索化二叉树比前序.中序要复杂一些:另外在复习线索化二叉树的过程中,大 ...

  5. Java操作数据库实现"增删改查"

    本文主要讲解JDBC操作数据库    主要实现对MySql数据库的"增删改查" 综合概述: JDBC的常用类和接口 一   DriverManager类 DriverManage类 ...

  6. WPF实现WORD 2013墨迹批注功能

    1 前言 WORD 2013可以使用墨迹在文档上面标注,本文讲述通过WPF第三方控件实现类似主要功能如下: 名称 描述 墨迹标注 不论是否触摸屏环境下可以开始墨迹功能,并实现鼠标/触摸在文档任意位置绘 ...

  7. ToolkitScriptManager vs. ScriptManager 关于“只能向页面中添加 ScriptManager 的一个实例”讨论

    在使用ASP.NET设计AJAX功能网页时,需要首先声明ToolkitScriptManager或者ScriptManager控件,这些全局的脚本核心控制,然后才能使用众多的AJAX控件.如果没有创建 ...

  8. Java网络编程基础之TCP粘包拆包

    TCP是个"流"协议,所谓流,就是没有界限的一串数据.大家可以想象河里的流水,他们是连成一片的,其间并没有分界线.TCP底层并不了解上层业务数据的具体含义,他会根据TCP缓冲区的实 ...

  9. redis 数据持久化 aof方式

    redis持久化-Append-only file(缩写aof)的方式 本质:把用户执行的每个  ”写“ 指令(增加.修改.删除)都备份到文件中,还原数据的时候就是执行具体写指令. 打开redis的运 ...

  10. 12.Proxy

    1.概述 Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程. Proxy 可以理解成,在目标对象之前架 ...