hdu4135 Co prime 互素統計

2021-07-02 03:11:20 字數 1011 閱讀 9616

題意:統計[l,r]中與m互素的數的個數

解法:1.求字首[1,r]中與m互素的個數

2.求反面——不互素的個數,再將m分解質因子,轉化為整除問題

(a,m)!=1,則m至少有乙個質因子整除a。ans=|a

1∪a2

∪...

∪ak|

,ai 為[1,r]中m的第i個質因子的倍數集合

複雜度:o(m*logm),與區間大小無關

拓展:

1.統計a[1,2…n]中與m互素的數的個數(a[i]<=a)

1.1預處理[1,a]中所有數在a陣列因子中出現的次數beinum

1.2在打星處將a/tmp改為beinum[tmp]即可

#include

#include

#include

#include

#include

#define lowbit(x) x&(-x)

#define mem(a,b) memset(a,b,sizeof(a))

#define ll long long

using

namespace

std;

#define rad 10000

const ll maxp= 100000;

int t;

ll a,b,n,ans;

bool not_prime[maxp];

vector

prime,factor;

void make_prime()

}}void divided(ll x)

}if(x!=1) factor.push_back(x);

}ll cal_sunum(ll a,ll n)

}if(tmpnum) ans+=(a/tmp);//***

else ans-=(a/tmp);//***

}return a-ans;

}int main()

}

hdu4135 co prime 容斥原理

題意 給定a b c,求a到b區間內與c互質的數。思路 求a到b之間的與c互素的數,等價於求1到b之間與c互素的數減去1到a之間與c互素的數。求 中與 互質的數的個數都是用尤拉函式,但如果 比較大或者是求 中與 互質的數的個數等等問題,要想時間效率高的話還是先對n分解質因數然後用容斥原理,這裡可以用...

hdu 4135 Co prime 容斥原理

題目 大意 求區間 a,b 內與n互質的數的個數。分析 單純來逐個判斷互質統計結果肯定會超時,那麼可以對n素因子分解,以素因子的個數作為迴圈的上界 第二層迴圈 第一層是列舉素因子,運用容斥原理來統計不互質的個數,最後再用總數減去不互質的個數就是互質的個數。容斥原理也就是提供了這樣間接求解的思想 先不...

hdu4135Co prime 容斥原理

題意 給定a b c,求a到b區間內與c互質的數。分析 我們可以先轉化下 用 1,b 區間與n互質的數的個數減去 1,a 1 區間與n互質的數的個數,那麼現在就轉化成求 1,m 區間於n 互質的數的個數,如果要求的是 1,n 區間與n互質的數的個數的話,我們直接求出n的尤拉函式值即可,可是這裡是行不...