POJ3904 Sky Code 容斥原理

2021-09-27 07:53:32 字數 712 閱讀 1023

這道題很容易想到用總的情況減去不互素的情況,需要統計不同素因子對應的資料個數,但這樣會多算(比如2的因子減過一次,3的因子減過一次,這時6的情況(eg:6,12,18,24)就多減了一次),因此想到用容斥原理。問題的關鍵在於,怎麼得到不同素因子組合對應的情況。附上大佬部落格orz:

這篇部落格講的很清楚,主要就是利用二進位制。**中有詳細的解釋,直接上ac**:

#include#include#include#include#includeusing namespace std;

#define ll long long

const int inf=0x3f3f3f3f;

const int max=10005;

int cnt[max];///含i的資料個數

int num[max];///i的素因子個數

///i指不同素因子組合相乘得到的數,eg:6=2*3,不是4=2*2(cnt=0)!!!

int pri[max];//每個資料的素因子

void solve(int n)

if(n>1)///注意!i*i<=n可降低時間複雜度!

pri[tot++]=n;

for(int i=1;i<(1<=4)

ll ans=cn4(n)-tmp;

printf("%lld\n",ans);

}return 0;

}

POJ 3904 Sky Code 容斥原理

題意 選出最大公約數為1的四元組的方案 思路 容斥原理 總的方案c n,4 減去t 1 t 2 t 3 kt k t i 表示四元組質因子的個數為i的方案數 include include include using namespace std const int maxn 10010 typede...

poj3904 容斥原理)

可以得到這樣的關係 奇數加 偶數減 題目大意 給一串數字,求解互質四元組的個數 注意不必兩兩互質 解題思路 網上有很多 但是詳細講解的很少,這裡結合筆者的思路詳細論述一下解題思路,耐心一看。首先容易想到,想計算不互質的四元組的個數,再用總的減去,關鍵是怎樣計數不互質四元組的個數?列舉公約數,對於同乙...

poj 3904 容斥原理 質因數分解

題意 給你一串數字,問選擇4個數且這四個數的最大公因數為1的選法為多少種 解法 很容易想到容斥原理,答案為選擇四個數的所有種數 四個數存在最大公因數為質數 四個數存在最大公因數為兩個質數之積 四個數存在最大公因數為三個質數之積。就是處理各個由質因子相乘得到的因子的數量比較麻煩。首先,題目給的資料範圍...