#include<bits/stdc++.h> usingnamespace std; #define ll long long constint INF = 0x3f3f3f3f; constint N = 5e5 + 10; const ll mod = 998244353; int n, m; int a[N], lst[N], vis[N]; ll ans[N]; structX{ int l, r, id; booloperator<(const X& b) { return r < b.r; } }q[N]; ll sum[N]; intlowbit(int x){ return x & -x; } voidadd(int p, int x){ for (int i = p; i < N; i+=lowbit(i)) sum[i] += x; } ll query(int r){ ll res = 0; for (int i = r; i > 0; i -= lowbit(i)) res += sum[i]; return res; } intmain(){ scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); lst[i] = vis[a[i]]; vis[a[i]] = i; } for (int i = 1; i <= m; i++) { scanf("%d%d", &q[i].l, &q[i].r); q[i].id = i; } sort(q + 1, q + 1 + m); int R = 1; for (int i = 1; i <= m; i++) { while (R <= q[i].r) { if (lst[R])add(lst[R], -a[R]); add(R, a[R]); R++; } ans[q[i].id] = query(q[i].r) - query(q[i].l - 1); } for (int i = 1; i <= m; i++)printf("%lld\n", ans[i]); return0; }
#include<bits/stdc++.h> usingnamespace std; #define ll long long constint INF = 0x3f3f3f3f; constint N = 5e5 + 10; const ll mod = 998244353; int n; int a[3010]; int dp[3010][2005]; intgcd(int a, int b){ if (a < b)swap(a, b); return b == 0 ? a : gcd(b, a%b); } intmain(){ scanf("%d", &n); for (int i = 1; i <= n; i++)scanf("%d", &a[i]); for (int i = 1; i <= n; i++) { dp[i][a[i]] = 1; for (int j = 1; j <= 2000; j++) { int t = __gcd(j, a[i]); dp[i][j] += dp[i - 1][j]; dp[i][t] = (dp[i][t] + dp[i - 1][j]) % mod; } } printf("%d\n", dp[n][1]); return0; }