bzoj3561DZY Loves Math VI
2024-10-12 03:52:50
3561: DZY Loves Math VI
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 503 Solved: 333
[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
莫比乌斯反演
http://blog.csdn.net/lych_cys/article/details/50721642?locationNum=1&fps=1
#include<bits/stdc++.h>
#define ll long long
#define mod 1000000007
#define N 500001
using namespace std;
int n,m,cnt,mo[N],p[N>>],vis[N];ll a[N],sum[N],ans;
void predeal(){
mo[]=;
for(int i=;i<N;i++){
if(!vis[i]){mo[i]=-;p[++cnt]=i;}
for(int j=;j<=cnt&&i*p[j]<N;++j){
vis[i*p[j]]=;
if(i%p[j])mo[i*p[j]]=-mo[i];
else{mo[i*p[j]]=;break;}
}
}
}
int quick(int a,int b){
int ret=;
while(b){
if(b&)ret=1ll*a*ret%mod;
a=1ll*a*a%mod;b>>=;
}
return ret;
}
int main(){
scanf("%d%d",&n,&m);predeal();if(n>m)swap(n,m);
for(int i=;i<N;i++)a[i]=;
for(int i=;i<=n;i++){
ll res=;
for(int j=;j*i<=m;++j)
a[j]=a[j]*j%mod,sum[j]=(sum[j-]+a[j])%mod;
for(int j=;j*i<=n;++j)
if(mo[j])res=(res+mo[j]*a[j]*a[j]%mod*sum[n/i/j]%mod*sum[m/i/j]%mod)%mod;
ans=(ans+res*quick(i,i)%mod)%mod;
}
ans<?ans+=mod:;printf("%lld\n",ans);
return ;
}
最新文章
- 【前端】原生event对象和jquery event对象的区别
- mediaplayer与surfaceView,无法播放问题
- Cannot install NodeJs: /usr/bin/env: node: No such file or directory
- Activity Lifecycle
- mvc无法找到资源
- apache .htaccess 伪静态重定向,防盗链 限制下载...
- jQuery Ajax 实例 具体介绍$.ajax、$.post、$.get的使用
- asp.net出现正在中止线程解决方案
- 第十节,While循环和for循环
- python脚本程序,传入参数*要用单引号&#39;*&#39;
- [转帖]Oracle 各个版本的升级路线图
- LOJ 3049: 洛谷 P5284: 「十二省联考 2019」字符串问题
- HTTP请求协议
- NSOperation、NSOperationQueue(III)
- JS添加/移除事件
- Ubuntu 录制视频并制作成gif图
- [UE4]工程设置:自动捕获鼠标、通过代码设置鼠标显示隐藏、输入模式、编译时自动保存
- csu 1356 Catch bfs(vector)
- 20155336 2016-2017-2 《Java程序设计》第三周学习总结
- 2_python之路之多级菜单