P2714-四元组统计【数论,容斥】
生活随笔
收集整理的這篇文章主要介紹了
P2714-四元组统计【数论,容斥】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
正題
題目鏈接:https://www.luogu.com.cn/problem/P2714
題目大意
給出nnn個數,求有多少個(i,j,k,l)(i,j,k,l)(i,j,k,l)使得gcd(ai,aj,ak,al)=1gcd(a_i,a_j,a_k,a_l)=1gcd(ai?,aj?,ak?,al?)=1。
解題思路
我們設fif_ifi?表示gcdgcdgcd和為iii的方案數。FiF_iFi?表示gcdgcdgcd和為iii的倍數的方案數。
先考慮如何統計FiF_iFi?,其實就是選出444個iii的倍數的方案數,可以統計iii的倍數的個數即可計算。
然后有fi=Fi?∑i∣jfjf_i=F_i-\sum_{i|j}f_jfi?=Fi??i∣j∑?fj?
時間復雜度O(Tnlog?n)O(Tn\log n)O(Tnlogn)
codecodecode
#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll N=11000; ll n,f[N]; int main() {while(scanf("%lld",&n)!=EOF){memset(f,0,sizeof(f));for(ll i=1;i<=n;i++){ll x;scanf("%lld",&x);f[x]++;}for(ll i=1;i<N;i++)for(ll j=i<<1;j<N;j+=i)f[i]+=f[j];for(ll i=N-1;i>=1;i--){f[i]=f[i]*(f[i]-1)*(f[i]-2)*(f[i]-3)/24;for(ll j=2*i;j<N;j+=i)f[i]-=f[j];}printf("%lld\n",f[1]);} }總結
以上是生活随笔為你收集整理的P2714-四元组统计【数论,容斥】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 联想笔记本电脑的配置从哪里看(联想笔记本
- 下一篇: 3d的电脑配置(什么是3d电脑配置)