HDU4407Sum ( 容斥原理)
題目連結:
http://acm.hdu.edu.cn/showproblem.php?pid=4407
題意:
一個長度為n的序列,開始的序列為1,2,3....n;
然後又兩種操作。
operation1: 詢問區間[a,b]中與p互質的數的和。
operation2:將序號為i的數修改為x;
如果沒有修改操作,那麼狠明顯就是一個容斥原理
計數的問題。
由於加上了修改,但是次數不多,因此我們可以將
修改後的點記錄下來,然後先容斥記下數,然後遍歷
記錄的陣列判斷修改後的數是否要加上,之前的數
是否要去掉。
程式碼如下:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <map>
#include <vector>
using namespace std;
typedef long long LL;
map<int,int > mp;
map<int,int >::iterator it;
vector<int >vc;
void fen(int x){
vc.clear();
for(int i=2;i*i<=x;i++){
if(x%i==0){
vc.push_back(i);
while(x%i==0) x/=i;
}
}
if(x>1) vc.push_back(x);
}
LL solve(int x,int p){
LL ans =(LL)x*(x+1)/2;
fen(p);
//cout<<"vc.size() "<<vc.size()<<endl;
for(int i=1;i<(1<<vc.size());i++){
int cnt = 0;
LL tmp = 1;
for(int j=0;j<vc.size();j++){
if((1<<j)&i) tmp*=vc[j],cnt++;
}
LL k = x/tmp;
k = (k+1)*k/2*tmp;
if(cnt%2) ans -= k;
else ans += k;
}
return ans;
}
int gcd(int a,int b){
return b ? gcd(b,a%b) : a;
}
int main()
{
int t,n,m,ord,x,y,p;
scanf("%d",&t);
while(t--){
mp.clear();
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
scanf("%d",&ord);
if(ord==2){
scanf("%d%d",&x,&y);
mp[x]=y;
}
else{
scanf("%d%d%d",&x,&y,&p);
LL ans = solve(y,p)-solve(x-1,p);
//printf("ans= %d\n",ans);
for(it=mp.begin();it!=mp.end();it++){
if(it->first>=x&&it->first<=y){
if(gcd(it->first,p)==1) ans -= it->first;
if(gcd(it->second,p)==1) ans +=it->second;
}
}
printf("%I64d\n",ans);
}
}
}
return 0;
}
相關文章
- 容斥原理
- 【模板】容斥原理
- 容斥原理學習筆記筆記
- 容斥原理——數學知識
- 容斥
- P1447 [NOI2010] 容斥原理
- 反射容斥反射
- HDU 4135 Co-prime(容斥原理+分解質因數)
- Min-Max 容斥
- lg容斥與反演
- cf449D. Jzzhu and Numbers(容斥原理 高維字首和)
- HDU 4135——Co-prime(容斥原理&&二進位制列舉)
- 容斥定理 AtCoder——FizzBuzz Sum Hard
- P4178 Tree——點分治 容斥
- Min-Max 容斥學習筆記筆記
- CodeForces571A. Lengthening Sticks(組合數學-容斥)
- cf900D. Unusual Sequences(容斥 莫比烏斯反演)
- 機率期望進階 + Min-Max容斥 練習題
- 「數學」助力每一個不知死活的容斥夢
- CF 773 (Div. 1) D. Two Arrays 雙指標 容斥指標
- HashMap擴容原理HashMap
- HashMap原理(二) 擴容機制及存取原理HashMap
- 2024FJCPC-H.螢火的意志-min-max容斥、Prufer序列(Cayley定理)、高維字首和
- Android內容服務ContentService原理淺析Android
- MySQL慢查詢記錄原理和內容解析MySql
- HashMap的底層結構、原理、擴容機制HashMap
- 索尼斥資2.29億美元收購Insomniac GameGAM
- CrazyLabs斥資50萬美元打造首家CrazyHub落戶印度
- Web前端效能優化_CDN(內容釋出網路)、CDN工作原理Web前端優化
- k8s 自動擴縮容HPA原理及adapter配置詳解?K8SAPT
- 小白也能看懂的JDK1.8前_HashMap的擴容機制原理JDKHashMap
- 深入理解Spark 2.1 Core (四):運算結果處理和容錯的原理Spark
- 大手筆:斥資500億美金 大眾集團加速自動駕駛自動駕駛
- 機器人太危險?馬斯克斥資千萬研究人工智慧機器人馬斯克人工智慧
- 戴爾斥資1億美元收購雲編排初創公司CloudifyCloud
- 大手筆!思科將斥資23.5億美元收購這家網路安全公司!
- 用大資料駁斥最反智的謊言:學歷不重要大資料
- 華為谷歌亞馬遜入局 斥巨資研發家用機器人 谷歌亞馬遜機器人
- EA斥資24億美元收購知名手遊廠商格融移動