国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

【SDOI2014】數表(table)

2019-11-06 06:06:13
字體:
來源:轉載
供稿:網友

Description

這里寫圖片描述 這里寫圖片描述

Solution

很明顯可以發現,n和m交換是不會影響答案的, 我們可以先設一個f(x)=∑d|xd表示i的約數和,還有一個數組g(x)=∑ni=1∑mj=1(gcd(i,j)=x),而答案明顯就是∑ni=1f(i)?g(i),看到了g(x)中的gcd可以很快能夠想到莫比烏斯反演,對g(x)我們化簡一下: g(x)=∑?ni?i=1∑?mj?j=1∑d=gcd(i,j)μ(d) =∑x|dμ(d)?nd??md? 然后把化簡后的g(x)代入求答案得: ans=∑ni=1f(i)∑x|dμ(d)?nd??md? =∑nd=1?nd??md?∑i|df(i)?μ(di) 我們令h(i)=∑i|df(i)?μ(di),因為只有當f(x)≤a的時候才有貢獻,所以,把所有詢問按照a從小到大離線排序,然后把符合條件的f(x)一個個加入進去,而對于h(i)我們可以用前綴和來維護。

Code

#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<stdio.h>using namespace std;#define fo(i,a,b) for(i=a;i<=b;i++)const int maxn=1e5+5;typedef long long ll;struct arr{ int n,m,mx,bh;}a[20005];struct da{ int f,PR;}f[maxn];bool cmp(arr x,arr y){return x.mx<y.mx;}bool cmp1(da x,da y){return x.f<y.f;}bool p[maxn];int cas,n,m,i,j,k,mx,s[maxn],mu[maxn],t[maxn];ll mo,ans[maxn];void screen(int mx){ int i,j,k; fo(i,2,mx){ if(!p[i]) s[++s[0]]=i,mu[i]=-1; fo(j,1,s[0]){ k=i*s[j]; if(k>mx) break; p[k]=true; if(i%s[j]==0){ mu[k]=0; break; } mu[k]=mu[i]*mu[s[j]]; } } mu[1]=1; fo(i,1,mx){ f[i].pr=i; for(j=i;j<=mx;j+=i) f[j].f+=i; }}void add(int x,int sum){ for(x=x;x<=mx;x+=x&(-x)) t[x]+=sum;}int get(int x){ int sum; sum=0;if(x==0) return 0; for(x=x;x;x-=x&(-x)) sum+=t[x]; return sum;}void solve(int x){ int n,m,bh,i,j; n=a[x].n,m=a[x].m,bh=a[x].bh; for(i=1;i<=n;i=j+1){ j=min(n/(n/i),m/(m/i)); ans[bh]+=(n/i)*(m/i)*(get(j)-get(i-1)); }}int main(){ freopen("table.in","r",stdin); freopen("table.out","w",stdout); mo=1;fo(i,1,31) mo=mo*2; scanf("%d",&cas); fo(i,1,cas){ scanf("%d%d%d",&a[i].n,&a[i].m,&a[i].mx); if(a[i].n>a[i].m) swap(a[i].n,a[i].m); a[i].bh=i;mx=max(mx,a[i].n); } screen(mx); sort(a+1,a+cas+1,cmp); sort(f+1,f+mx+1,cmp1); j=0; fo(i,1,cas){ while(j<mx&&f[j+1].f<=a[i].mx){ j++; for(k=f[j].pr;k<=mx;k+=f[j].pr){ add(k,f[j].f*mu[k/f[j].pr]); } } solve(i); } fo(i,1,cas) printf("%lld/n",ans[i]%mo);}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 杭锦后旗| 泸西县| 吕梁市| 姚安县| 乌兰察布市| 河间市| 玉环县| 临泽县| 衢州市| 竹溪县| 青河县| 会理县| 合江县| 洪湖市| 太原市| 平泉县| 盘山县| 哈尔滨市| 余庆县| 大城县| 天台县| 金坛市| 桐梓县| 四平市| 定陶县| 武夷山市| 尉犁县| 金阳县| 章丘市| 伊通| 天祝| 班玛县| 德保县| 漳浦县| 西宁市| 吉首市| 喀什市| 克什克腾旗| 晋城| 曲周县| 游戏|