3561: DZY Loves Math VI

Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 240  Solved: 163
[Submit][Status][Discuss]

Description

给定正整数n,m。求
 
 

Input

一行两个整数n,m。

Output

一个整数,为答案模1000000007后的值。

Sample Input

5 4

Sample Output

424

HINT

数据规模:

1<=n,m<=500000,共有3组数据。

Source

By Jcvb

挖坑

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

upd 9.15 我来填坑了 又做了一遍...

套路推导一番我们可以得到一个式子,我不会写LaTeX。。。。。。请移步lych大神的博客

然后重点在于怎么求值,其实暴力就行了,我们观察那个式子,其实我们只需要求到min(n/i,m/i)就行了,然后发现这样其实是调和级数,那么我们每次先把1->min(n/i,m/i)的sum调和级数更新一下,然后再调和级数计算答案,我们看后面那个i^d*j^d其实刚才被更新过了,直接O(1)就可以算出来,然后枚举p也是调和级数的,所以总的复杂度还是O(NlogN)  完了。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = , mod = ;
int n, m;
ll ans;
ll mu[N], a[N], sum[N];
int p[N], mark[N];
ll power(ll x, ll t)
{
ll ret = ;
for(; t; t >>= , x = x * x % mod) if(t & ) ret = ret * x % mod;
return ret;
}
void Init()
{
mu[] = ;
for(int i = ; i <= ; ++i)
{
if(!mark[i])
{
p[++p[]] = i;
mu[i] = -;
}
for(int j = ; j <= p[] && p[j] * i <= ; ++j)
{
mark[i * p[j]] = ;
if(i % p[j] == )
{
mu[i * p[j]] = ;
break;
}
mu[i * p[j]] = -mu[i];
}
}
}
int main()
{
Init();
scanf("%d%d", &n, &m);
if(n > m) swap(n, m);
for(int i = ; i <= m; ++i) a[i] = ;
for(int d = ; d <= n; ++d)
{
ll delta = ;
for(int p = ; p * d <= m; ++p)
{
a[p] = a[p] * (ll)p % mod;
sum[p] = (sum[p - ] + a[p]) % mod;
}
for(int p = ; p * d <= n; ++p) if(mu[p])
delta = (delta + mu[p] * a[p] % mod * a[p] % mod * sum[n / d / p] % mod * sum[m / d / p] % mod) % mod;
ans = (ans + delta * power(d, d) % mod) % mod;
}
printf("%lld\n", ans);
return ;
}

[Submit][Status][Discuss]

bzoj3561的更多相关文章

  1. 【BZOJ3561】DZY Loves Math VI (数论)

    [BZOJ3561]DZY Loves Math VI (数论) 题面 BZOJ 题解 \[\begin{aligned} ans&=\sum_{i=1}^n\sum_{j=1}^m\sum_ ...

  2. BZOJ3561 DZY Loves Math VI 数论 快速幂 莫比乌斯反演

    原文链接http://www.cnblogs.com/zhouzhendong/p/8116330.html UPD(2018-03-26):回来重新学数论啦.之前的博客版面放在更新之后的后面. 题目 ...

  3. [BZOJ3561] DZY Loves Math VI

    (14.10.28改) 本来只想写BZOJ3739:DZY Loves Math VIII的,不过因为和VI有关系,而且也没别人写过VI的题解,那么写下. 不过我还不会插公式…… http://www ...

  4. BZOJ3561 DZY Loves Math VI 莫比乌斯反演

    传送门 看到\(gcd\)相关先推式子(默认\(N \leq M\)): \(\begin{align*} \sum\limits_{i=1}^N \sum\limits_{j=1}^M (lcm(i ...

  5. 【bzoj3561】DZY Loves Math VI 莫比乌斯反演

    题目描述 给定正整数n,m.求   输入 一行两个整数n,m. 输出 一个整数,为答案模1000000007后的值. 样例输入 5 4 样例输出 424 题解 莫比乌斯反演 (为了方便,以下公式默认$ ...

  6. bzoj3561 莫比乌斯反演

    DZY Loves Math VI Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 518  Solved: 344[Submit][Status][D ...

  7. BZOJ3561 DZY Loves Math VI 【莫比乌斯反演】

    题目 给定正整数n,m.求 输入格式 一行两个整数n,m. 输出格式 一个整数,为答案模1000000007后的值. 输入样例 5 4 输出样例 424 提示 数据规模: 1<=n,m<= ...

  8. DZY Loves Math系列

    link 好久没写数学题了,再这样下去吃枣药丸啊. 找一套应该还比较有意思的数学题来做. [bzoj3309]DZY Loves Math 简单推一下. \[\sum_{i=1}^n\sum_{j=1 ...

  9. # DZY Love Math 系列

    DZY Love Math 系列 [BOZJ3309] DZY Loves Math 顺着套路就能得到:\(Ans = \sum_{T=1}\lfloor \frac{n}{T} \rfloor \l ...

随机推荐

  1. Broadcasting

    目录 Broadcasting Key idea How to understand? Why broadcasting? Broadcastable? Broadcast VS Tile Broad ...

  2. windows事件查看器

    如果一个软件发生异常,软件本身没有提示异常信息, 需要从事件查看器中查看产生的错误事件 运行输入eventvwr或者win + X

  3. POJ-3692Kindergarten,求最大独立集!

    Kindergarten Time Limit: 2000MS   Memory Limit: 65536K       Description In a kindergarten, there ar ...

  4. JPA中映射关系详细说明(一对多,多对一,一对一、多对多)、@JoinColumn、mappedBy说明

    JPA中的映射关系 jpa中维护one to one ,one to many, many to one ,many to many 四种映射关系. 在每个关系中,双方中的一方在其表中拥有连接列.那么 ...

  5. [bzoj3630][JLOI2014]镜面通道_计算几何_网络流_最小割

    镜面通道 bzoj-3630 JLOI-2014 题目大意:题目链接. 注释:略. 想法: 我们发现,只要上下界没有被完全封死,我们就一定有一条合法的光路. 所以只需要将上界和下界拆开即可. 拆点,把 ...

  6. [bzoj2738]矩阵乘法_整体二分_树状数组

    矩阵乘法 bzoj-2738 题目大意:给定一个$n*n$的矩阵.每次给定一个矩阵求矩阵$k$小值. 注释:$1\le n\le 500$,$1\le q\le 6\cdot 10^4$. 想法: 新 ...

  7. Java :面向对象

    Java :面向对象 直面Java 第001期 什么是面向过程 面向过程是以函数为中心,要解决一个问题,需要把问题分解为一个个的步骤,然后定义一系列的流程,用特定的输入经过函数的处理,最终输出特定的结 ...

  8. oracle11g expdp/impdp数据库

    oracle11g导入/导出数据库 导出 .创建目录 sqlplus / as sysdba create directory dbDir as 'd:\oralce_sdic_backup\'; g ...

  9. Linux学习系列之Inotify+Rsync实现实时数据同步

    Inotify简介 inotify介绍 inotify是一种强大的.异步的文件系统监控机制,linux内核从2.6.13起,加入了inotify的支持,通过inotify可以监控文件系统中添加.删除. ...

  10. 【转】配置windows路由表,使电脑同时连接内网外网方法

    1. 公司内部,内网和外网的网关不一样,怎么样让电脑可以同时上内网和外网呢? 来一张不相关的磁盘结构图: ----------------------------------------------- ...