博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【莫比乌斯反演】10.30破译密码
阅读量:4308 次
发布时间:2019-06-06

本文共 2168 字,大约阅读时间需要 7 分钟。

初涉的话先留坑吧

题目大意

$\sum_{i_1}^{a_1}\sum_{i_2}^{a_2}\cdots\sum_{i_m}^{a_m}(i_1,i_2,\cdots,i_m)$

$a_i<=1e6,2=<m<=10$

题目分析

首先寄存两篇比较好的博客:

1.

2.

 

这个问题可以推广至一类模型:$\sum_{i=1}^n\sum_{j=1}^mf[\gcd(i,j)]$.

该模型的推论是$原式=\sum_{u=1}^{\min(n,m)}\lfloor\frac{n}{u}\rfloor\lfloor\frac{m}{u}\rfloor\sum_{d|u}f[d]\mu(\frac{u}{d})$

注意到在本题中$f=id$,那么也就是说$原式=\sum_{u=1}^{\min(n,m)}\lfloor\frac{n}{u}\rfloor\lfloor\frac{m}{u}\rfloor \varphi(u)$.

因此先一遍线性筛求$\varphi$的前缀和,再数论分块做$\lfloor\frac{n}{u}\rfloor$这一部分。

 

本题对模型的转化还不算太深(算是比较裸的反演)

1 #include
2 typedef long long ll; 3 const int maxn = 13; 4 const int MO = 1e9+7; 5 const int TOP = 1000000; 6 const int maxPri = 80035; 7 const int maxNum = 1000035; 8 9 int T,n,mn,a[maxn],pr[maxPri];10 ll phi[maxNum],ans,tmp;11 bool vis[maxNum];12 13 int read()14 {15 char ch = getchar();16 int num = 0;17 bool fl = 0;18 for (; !isdigit(ch); ch=getchar())19 if (ch=='-') fl = 1;20 for (; isdigit(ch); ch=getchar())21 num = (num<<1)+(num<<3)+ch-48;22 if (fl) num = -num;23 return num;24 }25 void init()26 {27 phi[1] = 1;28 for (int i=2; i<=TOP; i++)29 {30 if (!vis[i]) pr[++pr[0]] = i, phi[i] = i-1;31 for (int j=1; (j<=pr[0])&&(pr[j]*i<=TOP); j++)32 {33 vis[pr[j]*i] = 1, phi[pr[j]*i] = phi[i]*pr[j];34 if (i%pr[j]==0) break;35 phi[pr[j]*i] = phi[i]*(pr[j]-1);36 }37 }38 for (int i=2; i<=TOP; i++) phi[i] = (phi[i]+phi[i-1])%MO;39 }40 int main()41 {42 freopen("gcd.in","r",stdin);43 freopen("gcd.out","w",stdout);44 T = read(), init();45 while (T--)46 {47 n = read(), ans = 0, mn = 0x3f3f3f3f;48 for (int i=1; i<=n; i++)49 a[i] = read(), mn = mn>a[i]?a[i]:mn;50 for (int i=1, j=0; i<=mn; i=j+1)51 {52 j = mn, tmp = 1;53 for (int k=1; k<=n; k++) j = std::min(j, a[k]/(a[k]/i));54 for (int k=1; k<=n; k++) tmp = tmp*(a[k]/i)%MO;55 ans = (ans+(phi[j]-phi[i-1]+MO)*tmp%MO)%MO;56 }57 printf("%lld\n",ans);58 }59 return 0;60 }

 

 

END

转载于:https://www.cnblogs.com/antiquality/p/9892267.html

你可能感兴趣的文章
Linux(SUSE 12)安装Tomcat
查看>>
Linux(SUSE 12)安装jboss4并实现远程访问
查看>>
Neutron在给虚拟机分配网络时,底层是如何实现的?
查看>>
netfilter/iptables全攻略
查看>>
Overlay之VXLAN架构
查看>>
Eclipse : An error occurred while filtering resources(Maven错误提示)
查看>>
在eclipse上用tomcat部署项目404解决方案
查看>>
web.xml 配置中classpath: 与classpath*:的区别
查看>>
suse如何修改ssh端口为2222?
查看>>
详细理解“>/dev/null 2>&1”
查看>>
suse如何创建定时任务?
查看>>
suse搭建ftp服务器方法
查看>>
centos虚拟机设置共享文件夹并通过我的电脑访问[增加smbd端口修改]
查看>>
文件拷贝(IFileOperation::CopyItem)
查看>>
MapReduce的 Speculative Execution机制
查看>>
大数据学习之路------借助HDP SANDBOX开始学习
查看>>
Hadoop基础学习:基于Hortonworks HDP
查看>>
为什么linux安装程序 都要放到/usr/local目录下
查看>>
Hive安装前扫盲之Derby和Metastore
查看>>
永久修改PATH环境变量的几种办法
查看>>