日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

51nod挑的部分5级题

發(fā)布時(shí)間:2025/7/25 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51nod挑的部分5级题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近心情不好所以寫代碼來獲得快落

4級(jí)題有點(diǎn)難做?然后就開始挑簡單的5級(jí)題開始寫

然后準(zhǔn)備記錄一些自己沒有做出來

參考討論區(qū)或者博客才做出來的題目

?

51nod_1189 階乘分?jǐn)?shù)

這個(gè)題參考了討論區(qū)

令 t = n!

1/t = 1/x + 1/y , 0 < x <= y 的正整數(shù)解計(jì)數(shù), n <= 1e6

考慮對(duì)式子進(jìn)行變換

1/t = (x + y) / xy

xy = t * (x + y)

我們這時(shí)候應(yīng)該有一個(gè)反應(yīng),配方有

(x - t) * (y - t) = t * t

所以考慮統(tǒng)計(jì) t * t 的因子數(shù)就可以了

分解質(zhì)因數(shù)即可

1 n, m, k = int(input()), 1, 1000000007 2 v = [0 for i in range(n + 1)] 3 p = [0 for i in range(n + 1)] 4 for i in range(2, n + 1): 5 if not v[i]: 6 p[0] += 1 7 p[p[0]] = i 8 t, j = 1, i 9 while j <= n: 10 t += n // j * 2 11 j *= i 12 m = m * t % k 13 for j in range(1, p[0] + 1): 14 if i * p[j] > n: 15 break 16 v[i * p[j]] = 1 17 if i % p[j] == 0: 18 break 19 print ((m + 1) * pow(2, k - 2, k) % k) View Code

?

51nod_1616 最小集合

這個(gè)題參考了博客

考慮 i 存在于原集合的條件

假設(shè) i 的倍數(shù) s = {a * i, b * i, c * i ... } 存在于輸入給定的集合中

那么我們知道 d = gcd(a, b),d * i 肯定是存在于原集合中的

那么必然存在 e = gcd(c, d),e * i 也存在于原集合中

即 gcd(a, b, c ...) * i 必然存在于原集合中

因?yàn)?i 要存在于原集合中只能依靠 s 中的元素

又有g(shù)cd(s) >= 1 * i

所以當(dāng)且僅當(dāng) gcd(s) == i 的時(shí)候

才有 i 存在于原集合

枚舉 i 即可

1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 const int N = 1e6 + 5; 6 7 int n, m, k, b[N]; 8 9 int main() { 10 ios::sync_with_stdio(false); 11 cin >> n; 12 for (int x, i = 1; i <= n; i ++) { 13 cin >> x, k = max(x, k); 14 if (!b[x]) b[x] = 1, m ++; 15 } 16 for (int i = 1; i <= k; i ++) 17 if (!b[i]) { 18 int t = 0; 19 for (int j = i << 1; j <= k; j += i) 20 if (b[j]) 21 t = __gcd(t, j); 22 if (t == i) m ++; 23 } 24 cout << m; 25 return 0; 26 } View Code

?

51nod_1586 約數(shù)和

傻屌題目,考慮a[x] +y

那么對(duì)b的x, 2x,3x..產(chǎn)生貢獻(xiàn)

那么對(duì)c的kx,容易發(fā)現(xiàn)貢獻(xiàn)次數(shù)為f(k),f(k)為k的因數(shù)個(gè)數(shù)

考慮到x是隨機(jī)的,所以采用每次更新的時(shí)候O(n / x)更新

查詢O(1)回答的話,期望每次更新次數(shù)是O(logn)的,成了

?

垃圾題目,c++ 提交的話,要開快讀和快速輸出...

visual c++提交的話,直接scanf + printf就成了...

1 #include <stdio.h> 2 3 const int N = 1e6 + 5; 4 5 int n, m, a[N]; 6 7 long long b[N]; 8 9 int main() { 10 int op, x, y; 11 scanf("%d %d", &n, &m); 12 for (int i = 1; i <= n; i ++) 13 for (int j = i; j <= n; j += i) 14 a[j] += 1; 15 while (m --) { 16 scanf("%d %d", &op, &x); 17 if (op == 1) { 18 scanf("%d", &y); 19 for (int i = 1, j = x; j <= n; i ++, j += x) 20 b[j] += y * a[i]; 21 } 22 else printf("%lld\n", b[x]); 23 } 24 return 0; 25 } View Code

?

轉(zhuǎn)載于:https://www.cnblogs.com/ytytzzz/p/9189133.html

總結(jié)

以上是生活随笔為你收集整理的51nod挑的部分5级题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。