最近心情不好所以写代码来获得快落

4级题有点难做?然后就开始挑简单的5级题开始写

然后准备记录一些自己没有做出来

参考讨论区或者博客才做出来的题目

51nod_1189 阶乘分数

这个题参考了讨论区

令 t = n!

1/t = 1/x + 1/y , 0 < x <= y 的正整数解计数, n <= 1e6

考虑对式子进行变换

1/t = (x + y) / xy

xy = t * (x + y)

我们这时候应该有一个反应,配方有

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

所以考虑统计 t * t 的因子数就可以了

分解质因数即可

 n, m, k = int(input()), 1, 1000000007
v = [0 for i in range(n + 1)]
p = [0 for i in range(n + 1)]
for i in range(2, n + 1):
if not v[i]:
p[0] += 1
p[p[0]] = i
t, j = 1, i
while j <= n:
t += n // j * 2
j *= i
m = m * t % k
for j in range(1, p[0] + 1):
if i * p[j] > n:
break
v[i * p[j]] = 1
if i % p[j] == 0:
break
print ((m + 1) * pow(2, k - 2, k) % k)

51nod_1616 最小集合

这个题参考了博客

考虑 i 存在于原集合的条件

假设 i 的倍数 s = {a * i, b * i, c * i ... } 存在于输入给定的集合中

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

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

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

因为 i 要存在于原集合中只能依靠 s 中的元素

又有gcd(s) >= 1 * i

所以当且仅当 gcd(s) == i 的时候

才有 i 存在于原集合

枚举 i 即可

 #include <bits/stdc++.h>

 using namespace std;

 const int N = 1e6 + ; 

 int n, m, k, b[N];

 int main() {
ios::sync_with_stdio(false);
cin >> n;
for (int x, i = ; i <= n; i ++) {
cin >> x, k = max(x, k);
if (!b[x]) b[x] = , m ++;
}
for (int i = ; i <= k; i ++)
if (!b[i]) {
int t = ;
for (int j = i << ; j <= k; j += i)
if (b[j])
t = __gcd(t, j);
if (t == i) m ++;
}
cout << m;
return ;
}

51nod_1586 约数和

傻屌题目,考虑a[x] +y

那么对b的x, 2x,3x..产生贡献

那么对c的kx,容易发现贡献次数为f(k),f(k)为k的因数个数

考虑到x是随机的,所以采用每次更新的时候O(n / x)更新

查询O(1)回答的话,期望每次更新次数是O(logn)的,成了

垃圾题目,c++ 提交的话,要开快读和快速输出...

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

 #include <stdio.h>

 const int N = 1e6 + ; 

 int n, m, a[N];

 long long b[N];

 int main() {
int op, x, y;
scanf("%d %d", &n, &m);
for (int i = ; i <= n; i ++)
for (int j = i; j <= n; j += i)
a[j] += ;
while (m --) {
scanf("%d %d", &op, &x);
if (op == ) {
scanf("%d", &y);
for (int i = , j = x; j <= n; i ++, j += x)
b[j] += y * a[i];
}
else printf("%lld\n", b[x]);
}
return ;
}

最新文章

  1. jeecg单步调试
  2. 上传8m以上文件,报错误 101 (net::ERR_CONNECTION_RESET):连接已重置
  3. Asp.net MVC 之过滤器
  4. git同一文件由于文件名大小写不同导致不能合并
  5. .net4.0下 解决asp.net中&ldquo;从客户端中检测到有潜在危险的Request.Form值&rdquo;的错误
  6. Android Material Design简单使用
  7. Totime iOS购物APP
  8. noip 2003 传染病控制(历史遗留问题2333)
  9. Hbase在的应用经验的统计
  10. YouKu iOS笔试题一
  11. asp.net core中写入自定义中间件
  12. jatoolsprinter web打印控件直接打印不弹出
  13. XVI Open Cup named after E.V. Pankratiev. GP of Ekaterinburg--I.Iron man
  14. Java虚拟机(五)Java的四种引用级别
  15. JAVA设计模式初探之适配器模式
  16. JS事件委托应用场景
  17. DotNetBar滚动条的疑似BUG
  18. djjango cookie和session 的几种常用需求使用方法
  19. HDU1402(fft)
  20. Hadoop生态圈-Hbase的rowKey设计原则

热门文章

  1. 主表a主表b 从表c中有ab两个表中各一个字段a1,b1 从表d中有ab两个表中各一个字段a2,b2
  2. python自动化测试学习笔记-2-字典、元组、字符串方法
  3. 7CSS之超链接
  4. [转]c# 对密码执行散列和 salt 运算方法
  5. 背包系列 hdu 3535 分组背包
  6. Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
  7. 查看Windows XP是否已激活的方法
  8. Java 基础入门随笔(2) JavaSE版——关键字、进制转换、类型转换
  9. 行动起来:转换传统桌面应用程序到UWP 并发布到Windows 应用商店!
  10. 【sqli-labs】 less50 GET -Error based -Order By Clause -numeric -Stacked injection(GET型基于错误的整型Order By从句堆叠注入)