51nod挑的部分5级题
最近心情不好所以写代码来获得快落
4级题有点难做?然后就开始挑简单的5级题开始写
然后准备记录一些自己没有做出来
参考讨论区或者博客才做出来的题目
这个题参考了讨论区
令 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)
这个题参考了博客
考虑 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 ;
}
傻屌题目,考虑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 ;
}
51nod挑的部分5级题的更多相关文章
- 51nod图论题解(4级,5级算法题)
51nod图论题解(4级,5级算法题) 1805 小树 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 她发现她的树的点上都有一个标号(从1到n),这些树都在空 ...
- 51nod 1353 树 | 树形DP经典题!
51nod 1353 树 | 树形DP好题! 题面 切断一棵树的任意条边,这棵树会变成一棵森林. 现要求森林中每棵树的节点个数不小于k,求有多少种切法. 数据范围:\(n \le 2000\). 题解 ...
- 51nod 矩阵快速幂(模板题)
1113 矩阵快速幂 基准时间限制:3 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 给出一个N * N的矩阵,其中的元素均为正整数.求这个矩阵的M次方.由于M次方的计算结果太大 ...
- 51nod 1273 旅行计划(思维题)
一开始看到这题真的有点懵逼...一直在想着套算法,结果题解除了sort和dfs其他什么都没用到 显然每次到达的一定都是叶子,先从根节点dfs一遍,按深度对叶子降序排序,按这个顺序向根节点dfs,路径上 ...
- 51nod 1717 好数 (水题)
题目: 看起来很复杂,其实就是有多少个素因子就翻转多少次. 然后考虑到只有平方数有奇数个素因子. 一次过,上代码把: #include <iostream> #include <al ...
- 51nod 1096 距离之和最小 思维题,求中位数
题目: 在一条直线上,与两个点距离之和最小的点,是怎样的点? 很容易想到,所求的点在这两个已知点的中间,因为两点之间距离最短. 在一条直线上,与三个点距离之和最小的点,是怎样的点? 由两个点的规律,我 ...
- 51nod 1218 最长递增子序列 | 思维题
51nod 1218 最长递增子序列 题面 给出一个序列,求哪些元素可能在某条最长上升子序列中,哪些元素一定在所有最长上升子序列中. 题解 YJY大嫂教导我们,如果以一个元素结尾的LIS长度 + 以它 ...
- 51nod 1086背包问题V2 (完全背包模板题)
1086 背包问题 V2 1 秒 131,072 KB 20 分 3 级题 题目描述 有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放在容量为W的背包里,每种物品的体积为W1, ...
- 区间dp(入门题)
区间dp:顾名思义就是在区间上进行动态规划,通过合并小区间求解一段区间上的最优解. 常见模板: for(int len=1;len<n;len++){//区间长度 for(int be=1;be ...
随机推荐
- ASP.NET_SessionId vs .ASPXAUTH why do we need both of them?
https://stackoverflow.com/questions/23758704/asp-net-sessionid-vs-aspxauth-why-do-we-need-both-of-th ...
- string转date
/*util-->sql*/ java.util.Date utdt; java.sql.Date sqldt =null; SimpleDateFormat simFormat = new S ...
- jQuery里$.post请求,后台返回结果为“json”格式,前台解析错误问题记录
在JSP页面使用$.post请求后台返回json数据时,在最后 必须加上返回数据格式为json的才行.不然JSP页面解析会出错.
- Github提交本地版本是遇到的问题
问题如下:*** Please tell me who you are. Run git config --global user.email "you@example.com" ...
- Oracle 递归的写法(start with) 以及where条件作用域
先转一个讲Oracle递归讲得非常透彻的文章: http://blog.csdn.net/weiwenhp/article/details/8218091 前言:嗯,这也是一个前人挖坑,后人来填的故事 ...
- JQuery 记第N次被坑 - ajax请求字符集问题
前言:两个功能差不多的页面,都是使用$.post()请求后台,页面A传递到后台的中文参数正常,页面B传递到后台的中文参数则为乱码 分析过程: ①使用chrome的开发者工具,分析两个页面的ajax请求 ...
- Cookie localStorage sessionStorage
三者的异同 特性 Cookie localStorage sessionStorage 数据的生命期 可设置失效时间,默认是关闭浏览器后失效 除非被清除,否则永久保存 仅在当前会话下(tab标签页)有 ...
- Unity 引擎UGUI之自定义树形菜单(TreeView)
先上几张效果图: 如果你需要的也是这种效果,那你就来对地方了! 目前,我们这个树形菜单展现出来的功能如下: 1.可以动态配置数据源: 2.点击每个元素的上下文菜单按钮(也就是图中的三 ...
- 初学layer
canvas是支持图层layer渲染这种技术的,canvas默认就有一个layer,当我们平时调用canvas的各种drawXXX()方法时,其实是把所有的东西都绘制到canvas这个默认的layer ...
- 关于 WebView 的一些笔记
什么是 WebView WebView 是手机中内置了一款高性能 webkit 内核浏览器,在 SDK 中封装的一个组件.没有提供地址栏和导航栏, WebView 只是单纯的展示一个网页界面.在开发中 ...