您的位置:首页 > 其它

【线性筛】【bzoj 3309】: DZY Loves Math

2014-12-24 16:57 288 查看
http://www.lydsy.com/JudgeOnline/problem.php?id=3309

哇呀线性筛好神奇啊

jcvb:

类似的方法化简得







并不是积性函数。
观察

的取值可以发现,



否则,当

时,


否则,

中存在两个质因子的次数不相同,


上述性质容易通过展开

得到证明。
这样,在线性筛的同时记录

的最小质因子

的次数

,以及

即可。

//#define _TEST _TEST
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
/************************************************
Code By willinglive Blog:http://willinglive.cf
************************************************/
#define rep(i,l,r) for(int i=(l),___t=(r);i<=___t;i++)
#define per(i,r,l) for(int i=(r),___t=(l);i>=___t;i--)
#define MS(arr,x) memset(arr,x,sizeof(arr))
#define LL long long
#define INE(i,u,e) for(int i=head[u];~i;i=e[i].next)
inline const int read()
{int r=0,k=1;char c=getchar();for(;c<'0'||c>'9';c=getchar())if(c=='-')k=-1;
for(;c>='0'&&c<='9';c=getchar())r=r*10+c-'0';return k*r;}
/////////////////////////////////////////////////
const int N=10001000;
LL a,b;
int prim[1000000],tot,g[N+10],s[N+10];
bool flag[N+10];
int cnt[N+10];//最小质因子的次数
int p[N+10];
/////////////////////////////////////////////////
void init()
{
cnt[1]=1; g[1]=0;
rep(i,2,N)
{
if(!flag[i])
{
prim[++tot]=i;
cnt[i]=1;
p[i]=1;
g[i]=1;
}
for(int j=1;j<=tot && i*prim[j]<=N;j++)
{
int cur=i*prim[j];
flag[cur]=1;
if(i%prim[j]==0)
{
cnt[cur]=cnt[i]+1;
p[cur]=p[i];
if(p[cur]==1) g[cur]=1;
else if(cnt[p[cur]]!=cnt[cur] || g[p[cur]]==0) g[cur]=0;
else g[cur]=-g[p[cur]];
break;
}
else
{
cnt[cur]=1;
p[cur]=i;
if(cnt[p[cur]]!=cnt[cur]||g[p[cur]]==0) g[cur]=0;
else g[cur]=-g[p[cur]];
}
}
}
rep(i,1,N) s[i]=s[i-1]+g[i];
}
/////////////////////////////////////////////////
void input()
{

}
void solve()
{
init();
rep(i,1,read())
{
LL ans=0;
a=read(); b=read();
if(a>b) swap(a,b);
int r;
for(int i=1;i<=a;i=r+1)
{
r=min(a/(a/i),b/(b/i));
ans+=(a/i)*(b/i)*(s[r]-s[i-1]);
}
printf("%lld\n",ans);
}
}
/////////////////////////////////////////////////
int main()
{
input(),solve();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: