1. 程式人生 > >51nod 1284 2 3 5 7的倍數 | 容斥原理

51nod 1284 2 3 5 7的倍數 | 容斥原理

using targe pre include mage style 部分 pan 相交

技術分享

用容斥原理求出不滿足條件的個數cnt,然後用n-cnt就得到答案了。

這裏不滿條件的數就是能整除2,3,5,7這些數的集合並集。要計算幾個集合並集的大小,我們要先將所有單個集合的大小計算出來,然後減去所有兩個集合相交的部分,再加回所有三個集合相交的部分,再減去所有四個集合相交的部分,依此類推,一直計算到所有集合相交的部分。

文章推薦:http://www.cppblog.com/vici/archive/2011/09/05/155103.html

#include <iostream>
#include<bits/stdc++.h>

using namespace std;

int main() { long long n,ans; scanf("%lld",&n); ans=n; ans-=(n/2+n/3+n/5+n/7); ans+=(n/6+n/10+n/14+n/15+n/21+n/35); ans-=(n/30+n/42+n/70+n/105); ans+=(n/210); cout<<ans<<endl; }

51nod 1284 2 3 5 7的倍數 | 容斥原理