hdu4135 容斥原理

2021-06-22 21:38:13 字數 564 閱讀 6071

題意:

給出a,b,n,求出[a,b]範圍內與n互素的數字的個數。

即b範圍內的不與n互素的數減去a範圍內不與n互素的數,把[1,a],[1,b]中不與n互素的數分別求出來,再減掉就是和n互素的數了。

那麼首先將n分解質因數,因子和因子的倍數可以被除盡,一定不與n互素,把這些數都記下來,篩法求素數即可~

然後把這些數和倍數加起來?果斷會有重複,所以這就到容斥原理了,其實這個畫個韋恩圖就好~

奇數加偶數減,用佇列,位運算,dfs都可以實現,不過那個位運算的搞了好久現在暫時還是沒懂。。

下面的**是佇列。

#include#includeusing namespace std;

long long a[1000],num;

void prime(long long n)

}if(n>1)

a[num++]=n;

}long long get(long long m)

{ long long que[10000],k,t=0,sum=0;

que[t++]=-1;

for(int i=0;i

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的尤拉函式值即可,可是這裡是行不通...

hdu 4135,數學 容斥

題意 求 a,b 區間裡面,與c互質的數的個數。範圍 0分析 先將c分解質因數,根據c的範圍可以判斷質數的範圍不超過x個。x 自己線性篩素數後,從小到大乘一下,看當乘到多少個的時候,積大於10 9,則可以判斷c的最多質因數個數 假設c的質因數有2,3,5 則 a,b 區間裡,包含質因數2的數的個數為...