小花梨的陣列

2021-09-23 01:57:31 字數 1660 閱讀 6064

probleme

小花梨的陣列

時間限制:1000ms

空間限制:512mb

description

小花梨得到了乙個長度為n的陣列a,現在要對它進行三種操作:

⚫1 l  r對所有的i∈[l,r],a[i]=a[i]∗minprime(a[i])

⚫2 l r對所有的i∈[l,r],a[i]=a[i]/minprime(a[i])

⚫3x求a[x]的值

minprime(x)= 1                      (x=1) 

x的最小素因子(x≥2)

現在給出初始陣列a,對其進行m次操作,對於第三種操作輸出結果。

input

第一行輸入兩個正整數n,m,表示陣列的長度以及操作次數(1≤n,m≤100000)

第二行輸入n個正整數表示陣列푎(1≤ai≤1000000)

接下來m行表示m次操作,每行輸入格式為"1  l   r"或者"2  l  r",或者"3x",對應上述三種操作。1≤l,r,x≤n,l≤r

output

對於第三種操作輸出答案即可,答案對109+7進行取模。

先要求出所有的素因子,然後用線段樹維護的方法求出除法的次數和乘法的次數

對於每一次除法,我們先判斷這個數之前有沒有被乘過 如果被乘過,那麼就抵消一次乘法。

詳細見**

ac**:

#includeusing namespace std;

#define ll long long

const int mod=1e9+7;

const int maxn=1e5+5;

ll k,n,m,mul[maxn<<2],divn[maxn<<2],a[maxn];

vectorf[maxn];

long long noprime[10000005];//表示某乙個數是不是素數

long long prime[10000005];//表示第幾個素數是...

void lln()

}void update(ll l,ll r,ll res,ll l,ll r,ll p)

return;

} pushdown(l,r,res);

ll mid=(l+r)/2;

if(l<=mid) update(l,mid,res<<1,l,r,p);

if(r>mid) update(mid+1,r,res<<1|1,l,r,p);

}void query(ll l,ll r,ll res,ll& mull,ll& divv,ll x)

pushdown(l,r,res);

ll mid=(l+r)/2;

if(x<=mid) query(l,mid,res<<1,mull,divv,x);

else query(mid+1,r,res<<1|1,mull,divv,x);

}ll pow(ll a, ll b, ll m)

return ans;

}int main()

ans=ans*pow(temp,mull,mod)%mod;//在用快速冪 求出乘的次數 乘上ans 可以得出最後的答案

printf("%lld\n",ans);

}} }

return 0;

}

線段樹 小花梨的陣列

題目描述 小花梨得到了乙個長度為n的陣列a,現在要對它進行三種操作 1 l r對所有的i l,r a i a i minprime a i 2 l r對所有的i l,r a i a i minprime a i 3 x 求a x 的值 現在給出初始陣列a,對其進行m次操作,對於第三種操作輸出結果。輸...

小花梨判連通

美登杯 上海市高校大學生程式設計邀請賽 華東理工大學 2019年5月18日 problemc 小花梨判連通 時間限制 2000ms 空間限制 512mb description 小花梨給出n個點,讓k位同學對這n個點任意新增無向邊,構成k張圖。小花梨想知道對於每個點i,存在多少個點j 包括i本身 使...

C 小花梨判連通

題意 給你k張圖,每個圖有點和邊。輸出每個點1 2.n的點在每張圖裡面都聯通的點的個數。思路 染色也行,並查集也行。在k張圖裡面給每個點染色。比如有3個點,4張圖。染色情況如下 點1 1 1 1 1 點2 1 1 2 2 點3 1 1 2 2 將每個點的k個染色情況作為map的key,點2 1 1 ...