编程题
### 问题描述
给定一个长度为 $n$ 的序列 $(a[1],a[2],……,a[n])$ 还有 $m$ 次操作:
$1, l, r$:询问区间 $[l,r]$ 的元素和。
$2, l, r, x$:将区间 $[l,r]$ 内的元素都加上 $x$。
$3, M, x$:将序列所有下标 $k(1\le k\le n)$ 满足 $k\%M==0$(即 $k$ 是 $M$ 的倍数)的元素 $a[k]$ 加上 $x$。
### 输入格式
第一行两个整数 $n,m$。
接下来 $n$ 个数表示初始序列。
接下来 $m$ 行每行第一个数为操作方法 $opt$。
若 opt=1,后面跟着两个整数 $l,r$。
若 opt=2,后面跟着三个整数 $l,r,x$。
若 opt=3,后面跟着两个整数 $M,x$。
### 输出格式
对于每一个操作 $1$,输出一行表示答案。
### 输入样例
```c++
5 4
1 2 3 4 5
1 1 5
2 2 4 1
3 2 2
1 1 5
```
### 输出样例
```c++
15
22
```
### 评测数据规模
对于 $100\%$ 的数据 $1\le n\le 10^5,1\le m\le 2\times 10^5,1\le a[i]\le 10^8,1\le l,r,M\le n,1\le x\le 10^5$。