【51Nod 1769】Clarke and math2

题面

51Nod

题解

对于一个数论函数\(f\),\(\sum_{d|n}f(d)=(f\times 1)(n)\)。

其实题目就是要求\(g=f\times 1^k\)。

考虑\(1^k(n)\)怎么求,因为\(1(n)\)是个积性函数,所以\(1^k(n)\)也是个积性函数。

我们考虑对于\(n\)的每个质因子\(p\)和它的次数\(r\),求出对应函数的值。

那么就相当于在每个不同的\(i_{j-1}\)及\(i_j\)中插入一个质因子,表示乘上\(p\)倍,也可以在同一个位置插。

那么根据排列组合,这个问题的答案就是\(k-1+r\choose r\),然后把每个质因数的贡献乘起来就是答案。

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int Mod = 1e9 + 7;
inline int gi() {
register int data = 0, w = 1;
register char ch = 0;
while (!isdigit(ch) && ch != '-') ch = getchar();
if (ch == '-') w = -1, ch = getchar();
while (isdigit(ch)) data = (10ll * data + ch - '0') % Mod, ch = getchar();
return w == 1 ? data : (-data + Mod) % Mod;
}
int fpow(int x, int y) {
int res = 1;
while (y) {
if (y & 1) res = 1ll * res * x % Mod;
x = 1ll * x * x % Mod;
y >>= 1;
}
return res;
}
const int MAX_N = 5e5 + 5;
int fac[25], ifc[25], C[25];
int N, K, f[MAX_N], g[MAX_N], h[MAX_N], cur[MAX_N]; int main () {
#ifndef ONLINE_JUDGE
freopen("cpp.in", "r", stdin);
#endif
fac[0] = 1; for (int i = 1; i <= 20; i++) fac[i] = 1ll * i * fac[i - 1] % Mod;
ifc[20] = fpow(fac[20], Mod - 2);
for (int i = 19; ~i; i--) ifc[i] = 1ll * ifc[i + 1] * (i + 1) % Mod;
N = gi(), K = gi();
for (int i = 1; i <= N; i++) f[i] = gi(), g[i] = 1, cur[i] = i;
for (int i = 0; i <= 20; i++) {
int nw = (i + K - 1) % Mod; C[i] = ifc[i];
for (int j = 0; j < i; j++) C[i] = 1ll * C[i] * (nw - j + Mod) % Mod;
}
for (int i = 2; i <= N; i++) {
if (cur[i] == 1) continue;
for (int j = i; j <= N; j += i) {
int k = 0;
while (cur[j] % i == 0) ++k, cur[j] /= i;
g[j] = 1ll * g[j] * C[k] % Mod;
}
}
for (int i = 1; i <= N; i++)
for (int j = i; j <= N; j += i)
h[j] = (h[j] + 1ll * f[i] * g[j / i]) % Mod;
for (int i = 1; i <= N; i++) printf("%d ", h[i]);
putchar('\n');
return 0;
}

【51Nod 1769】Clarke and math2的更多相关文章

  1. 【51Nod1769】Clarke and math2(数论,组合数学)

    [51Nod1769]Clarke and math2(数论,组合数学) 题面 51Nod 题解 考虑枚举一个\(i_k\),枚举一个\(i\),怎么计算\(i_k\)对\(i\)的贡献. 把\(\f ...

  2. 【51NOD 1847】奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数)

    [51NOD 1847]奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数) 题面 51NOD \[\sum_{i=1}^n\sum_{j=1}^nsgcd(i,j)^k\] 其中\( ...

  3. 【51Nod 1244】莫比乌斯函数之和

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 模板题... 杜教筛和基于质因子分解的筛法都写了一下模板. 杜教筛 ...

  4. 【51Nod 1501】【算法马拉松 19D】石头剪刀布威力加强版

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1501 dp求出环状不连续的前缀和,剩下东西都可以算出来,比较繁琐. 时间 ...

  5. 【51Nod 1622】【算法马拉松 19C】集合对

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1622 简单题..直接暴力快速幂 #include<cstdio&g ...

  6. 【51Nod 1616】【算法马拉松 19B】最小集合

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1616 这道题主要是查询一个数是不是原有集合的一个子集的所有数的gcd. ...

  7. 【51Nod 1674】【算法马拉松 19A】区间的价值 V2

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1674 对区间分治,统计\([l,r]\)中经过mid的区间的答案. 我的 ...

  8. 【hdu 5628】Clarke and math (Dirichlet卷积)

    hdu 5628 Clarke and math 题意 Given f(i),1≤i≤n, calculate \(\displaystyle g(i) = \sum_{i_1 \mid i} \su ...

  9. 【51nod 1785】数据流中的算法

    Description 51nod近日上线了用户满意度检测工具,使用高级人工智能算法,通过用户访问时间.鼠标轨迹等特征计算用户对于网站的满意程度.   现有的统计工具只能统计某一个窗口中,用户的满意程 ...

随机推荐

  1. angular修改端口号port

    报错:Port 4200 is already in use. Use '--port' to specify a different port. 因为4200端口已被使用,请使用“--port”修改 ...

  2. 《一起学mysql》4

    索引的使用   索引太少返回结果很慢,但是索引太多,又会占用空间.每次插入新记录时,索引都会针对变化重新排序   什么时候使用索引 1.where 从句中用到的字段  select * from tb ...

  3. python asyncio as_completed

    #asyncio 没有提供http协议的接口 aiohttp import asyncio import socket from urllib.parse import urlparse async ...

  4. 解决 IDEA 无法找到 java.util.Date 的问题

    原文首发于 studyidea.cn点击查看更多技巧 问题 最近在项目中频繁使用到 java.util.Date,但是使用 IDEA 提示查找 Date 类,却无法找到 java.util.Date. ...

  5. 使用T4模板同时生成多个类文件

    代码: <#@ template language="C#" debug="false" hostspecific="true"#&g ...

  6. Python - 集合 - 第十一天

    Python 集合 集合(set)是一个无序的不重复元素序列. 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建 ...

  7. Python 摘要算法hashlib 与hmac

    参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017686752491744 摘要算法(也成为哈希算法)是用来防篡改的,因为我们的即使 ...

  8. 面向对象的六大原则之 接口隔离原则——ISP

    ISP = Interface Segregation Principle   ISP的定义如下: 1.客户端不应该依赖他不需要的接口 2.一个类对另外一个类的依赖性应该是建立在最小的接口上 3.不应 ...

  9. ES6之Proxy 的巧用

    摘要: Proxy的骚操作. 作者:前端小智 原文:Proxy 的巧用 Fundebug经授权转载,版权归原作者所有. Proxy 介绍 使用Proxy,你可以将一只猫伪装成一只老虎.下面大约有6个例 ...

  10. 4-7 3D绘图

    In [1]: import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D % ...