题意:bc round 72 中文题面

分析(官方题解):

如果学过Dirichlet卷积的话知道这玩意就是g(n)=(f*1^k)(n),

由于有结合律,所以我们快速幂一下1^k就行了。

当然,强行正面刚和式也是能搞的(反正我不会)。

一次Dirichlet卷积复杂度是O(nlogn)的,所以总时间复杂度为O(nlognlogk).

注:普及Dirichlet卷积概念,设f,g为两个数论函数,

那么规定 (f∗g)=∑d|nf(d)g(n/d)为f,g的Dirichlet卷积

Dirichlet卷积有以下性质,有交换律和结合律,对加法有分配律
f∗(g∗h)=(f∗g)∗h
f∗(g+h)=f∗g+f∗h
f∗g=g∗f

然后对于这个题解上所说的一次Dirichlet卷积是O(nlogn)这个我不是很懂

但是看网上大神写的估计也差不多,感觉和埃氏筛的复杂度差不多甚至还要小应该是在O(nlognlogn)左右

所以下面的代码的复杂度大概应该是O(nlog^2nlogk)

然后顺带提一下,对于Dirichlet卷积来说,规定有一个幺元e的话

即:f*e=f,

这个幺元函数有一个性质e[1]=1,e[k]=0,k=1,2,3.....

这个在快速幂的时候会用到

然后上代码

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long LL;
const int N=1e5+;
const LL mod=1e9+;
int n,k;
LL f[N],s[N],ans[N],tmp[N];
void solve()
{
while(k)
{
if(k&)
{
for(int i=; i<=n; ++i)tmp[i]=;
for(int i=; i*i<=n; ++i)
{
tmp[i*i]=(tmp[i*i]+ans[i]*s[i])%mod;
for(int j=i+; j*i<=n; ++j)
tmp[i*j]+=(ans[i]*s[j]%mod+ans[j]*s[i]%mod)%mod,tmp[i*j]%=mod;
}
for(int i=; i<=n; ++i)ans[i]=tmp[i];
}
for(int i=; i<=n; ++i)tmp[i]=;
for(int i=; i*i<=n; ++i)
{
tmp[i*i]=(tmp[i*i]+s[i]*s[i])%mod;
for(int j=i+; j*i<=n; ++j)
tmp[i*j]+=(s[i]*s[j]%mod+s[j]*s[i]%mod)%mod,tmp[i*j]%=mod;
}
for(int i=;i<=n;++i)s[i]=tmp[i];
k>>=;
}
for(int i=; i<=n; ++i)tmp[i]=;
for(int i=; i*i<=n; ++i)
{
tmp[i*i]=(tmp[i*i]+f[i]*ans[i])%mod;
for(int j=i+; j*i<=n; ++j)
tmp[i*j]+=(f[i]*ans[j]%mod+f[j]*ans[i]%mod)%mod,tmp[i*j]%=mod;
}
for(int i=;i<=n;++i)ans[i]=tmp[i];
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);
for(int i=; i<=n; ++i)
scanf("%I64d",&f[i]),s[i] = ,ans[i] = ;
ans[] = ;
solve();
for(int i=; i<n; ++i)
printf("%I64d ",ans[i]);
printf("%I64d\n",ans[n]);
}
return ;
}

HDU 5628 Clarke and math Dirichlet卷积+快速幂的更多相关文章

  1. HDU.5628.Clarke and math(狄利克雷卷积 快速幂)

    \(Description\) \[g(i)=\sum_{i_1|i}\sum_{i_2|i_1}\sum_{i_3|i_2}\cdots\sum_{i_k|i_{k-1}}f(i_k)\ mod\ ...

  2. HDU 5628 Clarke and math——卷积,dp,组合

    HDU 5628 Clarke and math 本文属于一个总结了一堆做法的玩意...... 题目 简单的一个式子:给定$n,k,f(i)$,求 然后数据范围不重要,重要的是如何优化这个做法. 这个 ...

  3. HDU 5628 Clarke and math dp+数学

    Clarke and math 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5628 Description Clarke is a patient ...

  4. HDU 1757 A Simple Math Problem (矩阵快速幂)

    题目 A Simple Math Problem 解析 矩阵快速幂模板题 构造矩阵 \[\begin{bmatrix}a_0&a_1&a_2&a_3&a_4&a ...

  5. hdu 1757 A Simple Math Problem_矩阵快速幂

    题意:略 简单的矩阵快速幂就行了 #include <iostream> #include <cstdio> #include <cstring> using na ...

  6. hdu 5187 zhx's contest [ 找规律 + 快速幂 + 快速乘法 || Java ]

    传送门 zhx's contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  7. HDU 2855 斐波那契+矩阵快速幂

    http://acm.hdu.edu.cn/showproblem.php?pid=2855 化简这个公式,多写出几组就会发现规律 d[n]=F[2*n] 后面的任务就是矩阵快速幂拍一个斐波那契模板出 ...

  8. HDU 5950:Recursive sequence(矩阵快速幂)

    http://acm.hdu.edu.cn/showproblem.php?pid=5950 题意:给出 a,b,n,递推出 f(n) = f(n-1) + f(n-2) * 2 + n ^ 4. f ...

  9. HDU1757 A Simple Math Problem 矩阵快速幂

    A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

随机推荐

  1. 微软职位内部推荐-Sr DEV Lead, Bing Search Relevance

    微软近期Open的职位: Contact Person: Winnie Wei (wiwe@microsoft.com )Sr DEV Lead, Bing Search RelevanceLocat ...

  2. 玩转Log4Net

    玩转Log4Net 下载Log4Net 下载地址:http://logging.apache.org/log4net/download_log4net.cgi 把下载的  log4net-1.2.11 ...

  3. 用C#实现控制台进度条

    在写一些简单的控制台测试程序时,经常希望能够在程序运行的过程中实现进度条的功能以便查看程序运行的速度或者进度.本文以C#为例,实现简单的控制台进度条,以供大家参考(本文底部附下载地址). 1.实现效果 ...

  4. 自助Linux之问题诊断工具strace

    转  http://www.cnblogs.com/bangerlee/archive/2012/02/20/2356818.html 引言 “Oops,系统挂死了..." “Oops,程序 ...

  5. Python利用ConfigParser读取配置文件

    http://www.2cto.com/kf/201108/100384.html #!/usr/bin/python # -*- coding:utf-8 -*- import ConfigPars ...

  6. HDU 2159 FATE (DP 二维费用背包)

    题目链接 题意 : 中文题不详述. 思路 : 二维背包,dp[i][h]表示当前忍耐值为i的情况下,杀了h个怪得到的最大经验值,状态转移方程: dp[i][h] = max(dp[i][h],dp[i ...

  7. 【Mysql进阶技巧(1)】 MySQL的多表关联与自连接

    自连接 测试数据准备 CREATE TABLE `t2` ( `id` int(11) NOT NULL, `gid` char(1) DEFAULT NULL, `col1` int(11) DEF ...

  8. HeadFirst设计模式之观察者模式

    一.什么是观察者模式 观察者模式定义了一系列对象间一对多的关系,当主题对象的状态发生变化时,会通知所有观察者 二.自定义观察模式 1. 2. package headfirst.designpatte ...

  9. 新的HTTP框架:Daraja Framework

    https://www.habarisoft.com/daraja_framework.html

  10. *IntelliJ idea创建创建Maven管理的Java Web项目

    配置IntelliJ在IntelliJ的设置中,可以设置maven的安装目录,settings.xml文件的位置,和本地仓库的位置等信息.