fork(1) download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define MOD 1000000007
  4. #define ll long long
  5. vector<int> divs[100001];
  6. ll sum[100001],a[100001];
  7. int n;
  8. void pre(){
  9. ll ss;
  10. for(int i=1;i<=n;i++){
  11. ss=0;
  12. for(int j=i;j<=n;j+=i){
  13. ss = (ss + a[j] ) % MOD;
  14. }
  15. sum[i] = ss;
  16. }
  17. }
  18. void getdivs(){
  19. for(int i=1;i<=100000;i++){
  20. for(int j=i;j<=100000;j+=i){
  21. divs[i].push_back(j);
  22. }
  23. }
  24. }
  25. int main() {
  26. int test,x,y,q,h;
  27. ll z;
  28. scanf("%d",&test);
  29. getdivs();
  30. while(test--){
  31. scanf("%d %d",&n,&q);
  32. for(int i=1;i<=n;i++){scanf("%d",a+i);a[i] = a[i]*a[i] %MOD;sum[i]=0;}
  33. pre();
  34. while(q--){
  35. scanf("%d %d",&x,&y);
  36. if(x==1){
  37. printf("%lld\n",sum[y]);
  38. }
  39. else{
  40. scanf("%lld",&z);
  41. z = (z*z )%MOD;
  42. for(int d:divs[y]){
  43. sum[d] = (sum[d] - a[y] + z + MOD )% MOD;
  44. }
  45. a[y] = z;
  46. }
  47. }
  48. }
  49. return 0;
  50. }
Success #stdin #stdout 0.01s 27136KB
stdin
1
5 3
1 2 3 4 5
1 1
2 2 1
1 2
stdout
55
17