CF 920F 區間求約數個數

2022-09-21 04:06:11 字數 1118 閱讀 3379

給定乙個序列,支援區間每個元素變為它們的約數個數、區間求和

\(n \leq 10^5,a_i \leq 10^9\)

由於\(a_i \leq 10^9\),因此每乙個元素最多會被修改有限次就會變為1或2,複雜度\(o(nlogn)\)

#include using namespace std;

#define ll long long

const int n = 3e5 + 10;

const int m = 1e6 + 10;

int a[n];

int ans[m];

void sieve () }}

struct node t[n << 2];

void update(int rt)

void build(int l,int r,int rt)

int mid = (l + r) >> 1;

int ch = rt << 1;

build(l,mid,ch);

build(mid + 1,r,ch + 1);

update(rt);

}void modify(int l,int r,int rt)

int mid = (t[rt].l + t[rt].r) >> 1;

int ch = rt << 1;

if(r <= mid) else if(l > mid) else

update(rt);

}ll query(int l,int r,int rt) else if(l > mid) else

//cout << "#:" << l << ' ' << r << ' ' << res << endl;

return res;

}int n,m;

int main ()

build(1,n,1);

while(m --)

else

} return 0;}/*

7 66 4 1 10 3 2 4

2 1 7

2 4 5

1 3 5

2 4 4

1 5 7

2 1 7

*/

求約數的個數(約數個數定理)

最近做了乙個要求求乙個數約數個數的題,後來發現居然有這方面的定理,也就是約數個數定理,所以趕緊記下來。大概是 對於乙個大於1正整數n可以分解質因數 n p1 a1 p2 a2 p3 a3 pk ak,則n的正約數的個數就是 a1 1 a2 1 a3 1 ak 1 其中p1,p2,p3,pk都是n的質...

求大數的約數個數問題

在求數字的約數的個數時,往往會用for語句實現1 n之間所有的數進行取餘數從而判斷是不是餘數,若是,則加1,這演算法行得通,但在oj平台上提交時必定會超時,因為隨著n的增大,for迴圈語句所用的時間會越來越長。下面的程式是 判斷1到根號n之間,n的約數個數,從而來確定1到n之間n的約數個數 incl...

算數基本定理求約數個數

題目 最多約數問題 正整數x 的約數是能整除x的正整數,其約數的個數記為div x 例如div 10 4。設a 和b 是兩個正整數,找出a 和b 之間約數個數最多的數x 的約數個數。樣例輸入 1 36 樣例輸出 9 算數基本定理 又稱為正整數的唯一分解定理,即 每個大於1的自然數要麼它本身就是質數或...