您的位置:首页 > 其它

2017.9.5 能量采集 思考记录

2017-09-05 23:20 267 查看
第一个自己搞出来的反演题、

相比于上一个题,这个题简直和善

直接反演搞,最后一步还不用化简、、

这题放到现在出估计全场都A了

和bzoj3309相比,它只是第一步、

而正解是phi、、

码:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define N 100005
#define ll long long
ll n,m,ans,mu
,su
,tot,i,j,k,f
;
bool he
;
void eular(int n)
{
mu[1]=1;
for(i=2;i<=n;i++)
{
if(!he[i])
{
su[++tot]=i;
mu[i]=-1;
}
for(j=1;j<=tot&&su[j]*i<=n;j++)
{
he[i*su[j]]=1;
if(i%su[j]==0)
{
mu[i*su[j]]=0;
break;
} else
{
mu[i*su[j]]=-mu[i];
}
}
}
}
int main()
{
scanf("%lld%lld",&n,&m);
if(n>m)swap(n,m);
eular(n);
for(i=1;i<=n;i++)
{
for(j=i;j<=n;j+=i)
{
f[j]+=mu[j/i]*((i-1)*2+1);
}
}
for(i=1;i<=n;i++)
{
ans+=f[i]*(m/i)*(n/i);
}
printf("%lld",ans);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: