洛谷P4213 【模板】杜教筛(Sum)(杜教筛,莫比乌斯反演)
2024-09-08 09:29:25
坑着,联赛活着回来再填(死了就不填了)
// luogu-judger-enable-o2
//minamoto
#include<iostream>
#include<cstdio>
#include<map>
#define ll long long
using namespace std;
const int N=1e5+,M=4e6+,limit=;
map<ll,ll> _mu;
map<ll,ll>::iterator ii;
ll p[M],m,mu[M];int vis[M];
void init(){
mu[]=;
for(ll i=;i<limit;++i){
if(!vis[i]) p[++m]=i,mu[i]=-;
for(int j=;j<=m&&i*p[j]<limit;++j){
vis[i*p[j]]=;
if(i%p[j]==){
mu[i*p[j]]=;
break;
}
mu[i*p[j]]=-mu[i];
}
}
for(int i=;i<limit;++i)
mu[i]+=mu[i-];
}
ll sum2(ll n){
if(n<limit) return mu[n];
if(_mu.count(n)) return _mu[n];
ll ans=;
for(int i=,r;i<=n;i=r+){
r=n/(n/i);
ans-=(r-i+)*sum2(n/i);
}
return _mu[n]=ans;
}
ll sum1(ll n){
ll ans=;
for(ll i=,r;i<=n;i=r+){
r=n/(n/i);
ans+=(n/i)*(n/i)*(sum2(r)-sum2(i-));
}
return ((ans-)>>)+;
}
int main(){
// freopen("testdata.in","r",stdin);
init();
ll T,n;scanf("%lld",&T);
while(T--){
scanf("%lld",&n);
printf("%lld %lld\n",sum1(n),sum2(n));
}
return ;
}
最新文章
- cacti添加主机监控
- uva 11401 Triangle Counting
- 【工具相关】iOS-Reveal的使用
- NOI模拟赛Day5
- MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)
- iOS-Block的多种使用
- [译]Canvas的基本用法
- oracle 表查询二
- Qt中的键盘事件,以及焦点的设置(比较详细)
- WCF学习笔记(2)——使用IIS承载WCF服务
- centos6.4 安装erlang
- 【Java】0X003 面向对象
- JS 各种宽高
- (二叉树 递归) leetcode 144. Binary Tree Preorder Traversal
- semantic-ui 图标
- python全栈开发day101-认证组件、权限组件、频率组件
- VS Code 添加移除asp.net core项目引用
- IP代理(proxies参数)
- 安装mysql出现no compatible servers were found
- html5 ajax 文件上传