題意:求[a,b]區間裡面,與c互質的數的個數。
範圍:0分析:
先將c分解質因數,根據c的範圍可以判斷質數的範圍不超過x個。(x:自己線性篩素數後,從小到大乘一下,看當乘到多少個的時候,積大於10^9,則可以判斷c的最多質因數個數)。
假設c的質因數有2,3,5;
則[a,b]區間裡,包含質因數2的數的個數為b/2-(a-1)/2;
同理質因數3,5等,也是這樣求。
然後根據容斥原理,包含乙個質因數-包含兩個質因數+包含三個質因數-包含四個質因數……,一次類推,即可得到結果。
注意邊界問題,區間[a,b]中a和b也包含在內。
**:#include#include#include#includeusing namespace std;
long long a,b,n;
vectorvt;
long long solve(long long x,long long n)
if(n>1)
vt.push_back(n);
long long sum=0,val,cnt;
for(i=1;i<(1<>a>>b>>n;
cout<<"case #"<<++cases<<": "<
hdu4135 容斥原理
題意 給出a,b,n,求出 a,b 範圍內與n互素的數字的個數。即b範圍內的不與n互素的數減去a範圍內不與n互素的數,把 1,a 1,b 中不與n互素的數分別求出來,再減掉就是和n互素的數了。那麼首先將n分解質因數,因子和因子的倍數可以被除盡,一定不與n互素,把這些數都記下來,篩法求素數即可 然後把...
hdu 4135 容斥原理
剛接觸,有關因子個數的增加不太弄得好,然後看到了這個神奇的遞迴 ac include includeusing namespace std define ll long long ll a,b,ansa,ansb,ans,p 100 up void dfs int n,bool tag,ll num...
hdu 4135 容斥原理
題意 就是讓你求 a,b 區間於n互質的數的個數.分析 我們可以先轉化下 用 1,b 區間與n互質的數的個數減去 1,a 1 區間與n互質的數的個數,那麼現在就轉化成求 1,m 區間於n互質的數的個數,如果要求的是 1,n 區間與n互質的數的個數的話,我們直接求出n的尤拉函式值即可,可是這裡是行不通...