日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BZOJ3944: Sum

發布時間:2024/9/5 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ3944: Sum 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

BZOJ3944: Sum

Description

Input

一共T+1行 第1行為數據組數T(T<=10) 第2~T+1行每行一個非負整數N,代表一組詢問

Output

一共T行,每行兩個用空格分隔的數ans1,ans2

Sample Input

6
1
2
8
13
30
2333

Sample Output

1 1
2 0
22 -2
58 -3
278 -3
1655470 2
題解Here! 這個應該算是杜教篩的模板題了。 雖然我并不知道杜教是誰。。。 放上幾篇博客吧,這里懶得寫了。。。 鏈接在此! 實在不行就直接背板子嘛。。。 附代碼: #include<iostream> #include<algorithm> #include<cstdio> #include<map> #define MAXN 1700010 using namespace std; map<int,long long> sum; int k=0,prime[MAXN],mu[MAXN]; bool np[MAXN]; inline long long read(){long long date=0,w=1;char c=0;while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}return date*w; } void make(){int m=MAXN-10;mu[1]=1;for(int i=2;i<=m;i++){if(!np[i]){prime[++k]=i;mu[i]=-1;}for(int j=1;j<=k&&prime[j]*i<=m;j++){np[prime[j]*i]=true;if(i%prime[j]==0)break;mu[prime[j]*i]=-mu[i];}}for(int i=2;i<=m;i++)mu[i]+=mu[i-1]; } long long solve_mu(long long n){if(n<=MAXN-10)return mu[n];if(sum.count(n))return sum[n];long long ans=1;for(long long i=2,last;i<=n;i=last+1){last=n/(n/i);ans-=1LL*(last-i+1)*solve_mu(n/i);}sum[n]=ans;return ans; } long long solve_phi(long long n){long long ans=0;for(long long i=1,last;i<=n;i=last+1){last=n/(n/i);ans+=1LL*(n/i)*(n/i)*(solve_mu(last)-solve_mu(i-1));}return ((ans-1>>1)+1); } int main(){make();int t=read();while(t--){long long n=read();printf("%lld %lld\n",solve_phi(n),solve_mu(n));}return 0; }

?

轉載于:https://www.cnblogs.com/Yangrui-Blog/p/9581583.html

總結

以上是生活随笔為你收集整理的BZOJ3944: Sum的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。