题面 传送门 分析 看到约数之和,我们首先想到约数和公式 若$ x=\prod_{i=1}^{n}p_i^{k_i} \(,则x的约数和为\) \prod_{i=1}^{n} \sum_{j=0}^{k_i} p_i^j$ 那么我们可以DFS枚举x的质因数分解式,然后判断求出的约数和是否等于s 具体来说,我们先枚举选的质数\(p_i\),对于每个\(p_i\)枚举他们的指数\(k_i\)(指数为0相当于不选),然后计算和\(tmp=1+p_i+p_i^2+\dots+p_i^{k_i}\) 然后…
考试只筛到了30分,正解dfs...... 对于任意N=P1^a1*P2^a2*......*Pn^an, F(N)=(P1^0+P1^1+...+P1^a1)(P2^0+P2^1+...+P2^a2)*...*(Pn^0+Pn^1+...+Pn^an) 从小到大枚举素数P,依次判定是否有K满足(P^0+P^1+...+P^K)|X 有一些细节需要处理,比如当前S为某大素数+1...... 一开始打O(√n)一直T两个点,后来改成了O(√s)就过了. #include<cstdio> #inc…
BZOJ_3629_[JLOI2014]聪明的燕姿_dfs Description 阴天傍晚车窗外 未来有一个人在等待 向左向右向前看 爱要拐几个弯才来 我遇见谁会有怎样的对白 我等的人他在多远的未来 我听见风来自地铁和人海 我排着队拿着爱的号码牌 城市中人们总是拿着号码牌,不停寻找,不断匹配,可是谁也不知道自己等的那个人是谁.可是燕姿不一样,燕姿知道自己等的人是谁,因为燕姿数学学得好!燕姿发现了一个神奇的算法:假设自己的号码牌上写着数字S,那么自己等的人手上的号码牌数字的所有正约数之和必定等于…
P4397 [JLOI2014]聪明的燕姿 根据唯一分解定理 $n=q_{1}^{p_{1}}*q_{2}^{p_{2}}*q_{3}^{p_{3}}*......*q_{m}^{p_{m}}$ 而$n$的约数和为$\prod_{i=1}^{m} \sum_{j=0}^{p_{i}}q_{i}^j$ 于是我们可以暴搜枚举每个约数的个数,而且只要枚举到$\sqrt{S}$ tips:注意最后一个数字后不带空格 #include<iostream> #include<cstdio> #…
P4397 [JLOI2014]聪明的燕姿 题目背景 阴天傍晚车窗外 未来有一个人在等待 向左向右向前看 爱要拐几个弯才来 我遇见谁会有怎样的对白 我等的人他在多远的未来 我听见风来自地铁和人海 我排着队拿着爱的号码牌 题目描述 城市中人们总是拿着号码牌,不停寻找,不断匹配,可是谁也不知道自己等的那个人是谁. 可是燕姿不一样,燕姿知道自己等的人是谁,因为燕姿数学学得好!燕姿发现了一个神奇的算法:假设自己的号码牌上写着数字 \(S\),那么自己等的人手上的号码牌数字的所有正约数之和必定等于 \(S…
[LG4397][JLOI2014]聪明的燕姿 题面 洛谷 题解 考虑到约数和函数\(\sigma = \prod (1+p_i+...+p_i^{r_i})\),直接爆搜把所有数搜出来即可. 爆搜过程和这道题一样,这里不再赘述. 代码 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <…
聪明的燕姿 解题思路: 首先我们肯定要用到约数之和定理 但是有个问题就是要怎么用 根据经验得知,约数最多也就六七个左右,不然直接就超了s的范围.所以我们考虑用爆搜来做 但是用爆搜的话还是要优化一下思路和用什么顺序去搜索. 顺序: 按照p和α的顺序来枚举 一旦s%这个当前的乘积==0(dfs的精髓) 那才能跳到下一层循环因为这样才符合约数和定理 dfs的精髓:当前条件满足,然后递归到下一层.到最后一层的时候又满足条件.然后跳出递归 可能要想一些剪枝: 当s等于1+p的时候,直接就得到一个答案.这样…
[NOI 2008]假面舞会 题目 阴天傍晚车窗外 未来有一个人在等待 向左向右向前看 爱要拐几个弯才来 我遇见谁会有怎样的对白 我等的人他在多远的未来 我听见风来自地铁和人海 我排着队拿着爱的号码牌 城市中人们总是拿着号码牌,不停寻找,不断匹配,可是谁也不知道自己等的那个人是谁.可是燕姿不一样,燕姿知道自己等的人是谁,因为燕姿数学学得好!燕姿发现了一个神奇的算法:假设自己的号码牌上写着数字S,那么自己等的人手上的号码牌数字的所有正约数之和必定等于S 所以燕姿总是拿着号码牌在地铁和人海找数字(喂…
题目描述 阴天傍晚车窗外 未来有一个人在等待 向左向右向前看 爱要拐几个弯才来 我遇见谁会有怎样的对白 我等的人他在多远的未来 我听见风来自地铁和人海 我排着队拿着爱的号码牌 城市中人们总是拿着号码牌,不停寻找,不断匹配,可是谁也不知道自己等的那个人是谁.可是燕姿不一样,燕姿知道自己等的人是谁,因为燕姿数学学得好!燕姿发现了一个神奇的算法:假设自己的号码牌上写着数字S,那么自己等的人手上的号码牌数字的所有正约数之和必定等于S. 所以燕姿总是拿着号码牌在地铁和人海找数字(喂!这样真的靠谱吗)可是她…
城市中人们总是拿着号码牌,不停寻找,不断匹配,可是谁也不知道自己等的那个人是谁. 可是燕姿不一样,燕姿知道自己等的人是谁,因为燕姿数学学得好!燕姿发现了一个神奇的算法:假设自己的号码牌上写着数字 S,那么自己等的人手上的号码牌数字的所有正约数之和必定等于 S. 所以燕姿总是拿着号码牌在地铁和人海找数字(喂!这样真的靠谱吗)可是她忙着唱<绿光>,想拜托你写一个程序能够快速地找到所有自己等的人. Solution 分析约数和的式子(1+p1+p1^2+...+p1^a1)*(1+p2+p2^2+.…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3629 [题意] 给定S,找出所有约数和为S的数. [思路] 若n=p1^a1*p2^a2*...*pk^ak 则约数和f(n)为(p1^0+p1+p1^2+...+p1^a1)*(p2^0+p2+p2^2+...+p2^a2)*...*(pk^0+pk+pk^2+...+pk^ak) 考虑搜索,使得和为S.至于这个搜索怎么写的,我能说我看不懂吗=_= [代码] #include<cm…
题意 给出一个数 \(S\) ,输出所有约数和等于 \(S\) 的数. \(S \le 2 \times 10^9\) ,数据组数 \(\le 100\) . 题解 首先用约数和定理: \[ \begin{align} n &= \prod_{i} p_i^{a_i} \\ \Rightarrow \sigma(n) &= \prod_{i} (\sum_{j=0}^{a_i} p_i^j) \end{align} \] 那么,我们可以通过从小到大来枚举质数 \(p_i\) 及其指数 \(…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3629 如果要搜索,肯定得质因数分解吧:就应该朝这个方向想. **约数和定理: 对于任意一个大于1的正整数N可以分解正整数:N=P₁^a₁ P₂^a₂…Pn^an,则由约数个数定理可知N的正约数有(a₁+1)(a₂+1)(a₃+1)…(an+1)个,那么N的(a₁+1)(a₂+1)(a₃+1)…(an+1)个正约数的和为f(N)=(P₁^0+P₁^1+P₁^2+…P₁^a₁)(P₂^0+P₂…
这道题考试选择打表,完美爆零.. 算数基本定理: 任何一个大于1的自然数N,都可以唯一分解成有限个质数的乘积N=P₁^a₁ P₂^a₂…Pn^an,这里P₁<P₂<…<Pn均为质数,其诸指数ai是正整数. 这样的分解称为N的标准分解式. 约数和定理: 对于任意一个大于1的正整数N可以分解正整数:N=P₁^a₁ P₂^a₂…Pn^an,则由约数个数定理可知N的正约数有(a₁+1)(a₂+1)(a₃+1)…(an+1)个,那么N的(a₁+1)(a₂+1)(a₃+1)…(an+1)个正约数的和…
根据约数和公式来拆s,最后再把答案乘出来,我们发先这样的话递归层数不会太大每层枚举次数也不会太多,然而我们再来个剪枝就好了 #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<vector> using namespace std; inline int read() { ; char ch=getchar(); ')ch=getchar…
数论+爆搜 详见这位大佬https://blog.csdn.net/eolv99/article/details/39644419 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N=100000; int s,p[N+5],tot,ans[N+5],con; bool v[N+5]; bool ok(int x) { if(x==1) retu…
http://www.lydsy.com/JudgeOnline/problem.php?id=3629 约数和定理: 若n的标准分解式为 p1^k1 * p2^k2 …… 那么n的约数和= π (Σ pi^xi ) xi∈[0,ki] 原本枚举小于S的质数,通过先判断S-1是不是质数 就可以 枚举根号S内的质数 #include<cstdio> #include<algorithm> using namespace std; #define N 1000000 ],cnt; ];…
http://www.lydsy.com/JudgeOnline/problem.php?id=3629 搜索. 我们知道: 如果$N=\prod\limits_{i=1}^{m}p_{i}^{k_{i}}$,其中$p_{i}$为质数,那么N的约数和为$\prod\limits_{i=1}^{m}(p_{i}^{0}+p_{i}^{2}+...+p_{i}^{k_{i}})$ 如$36=2^{2}*3^{2}$,那么$36$的约数和为$(2^{0}+2^{1}+2^{2})*(3^{0}+3^{…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3629 扫除了一个知识盲点:约数和定理 约数和定理: 对于一个大于1正整数n可以分解质因数:n=p1^a1*p2^a2*p3^a3*…*pk^ak,则由约数个数定理可知n的正约数有(a₁+1)(a₂+1)(a₃+1)…(ak+1)个,那么n的(a₁+1)(a₂+1)(a₃+1)…(ak+1)个正约数的和为f(n)=(p1^0+p1^1+p1^2+…p1^a1)(p2^0+p2^1+p2^2+…
(⊙﹏⊙)我交了好久,有坑啊...(如果没有匹配的话,即输出0种情况要记得换行...) 就是搜索,加上一点数论,并不太难... #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define M 100100 using namespace std; typedef long long ll; ll n,p[M],ans[M],tot; bool not_pr…
传送门 一道神奇的搜索. 直接枚举每个质因数的次数,然后搜索就行了. 显然质因数k次数不超过logkn" role="presentation" style="position: relative;">logknlogkn,因此搜索很快. 注意,如果最后剩下的乘积-1是一个质数,那么这是一个可行解. 另外对于这道题,我们只需要筛出1e5的素数就够了,太大的直接枚举自己打的素数表判就行了. 代码: #include<bits/stdc++.h&g…
题目链接 : 1. 洛谷 2.topoi . 大致题意:输入一个数s,找出所有约数和为s的数 关于一个数的约数和求法: 一个>1的整数可以被分解为多个 质数 的乘方,设数 s = p1k1 * p2k2 * p3k3  *......*pnkn 根据 组合 的思想  s的约数和 = (p10 +p11+p12+......+p1k1)*(p20 +p21+p22+......+p2k2)*........*(pn0 +pn1+pn2+......+pnkn); 数据很大,有多组测试数据,首先想到…
传送门 dfs的时候莫名其妙深度太大过不了……然后死活找不出哪里错…… 首先,约数和这东西是个积性函数,或者直接点的话就是如果$$n=p_1^{a_1}p_2^{a_2}p_3^{a_3}…p_m^{a_m}$$ 那么$n$的约数和就等于$$S=\begin{matrix} \prod_{i=1}^m \end{matrix}\begin{matrix} \sum_{j=0}^{a_i} {p_i}^j \end{matrix}$$然后因为最近刚学过等比数列求和公式我就把这东西往那方面去想了………
传送门 Luogu 解题思路 很容易想到直接构造合法的数,但是这显然是会T飞的. 我们需要考虑这样一件事: 对于一个数 \(n\),对其进行质因数分解: \[n=\sum_{i=1}^x p_i^{c_i}\] 那么就会有: \[\sigma(n)=\prod_{i=1}^x \sum_{j=1}^{c_i}p^j\] 可以证明 \(\sigma(n)\) 和 \(n\) 同级,所以这个质因子 \(p_i\le \sqrt{S}\),所以我们可以直接爆搜出来所有小于 \(\sqrt{S}\) 的…
[LOJ 2720][BZOJ 5417][UOJ 395][NOI 2018]你的名字 题意 给定一个大串 \(S\) 以及 \(q\) 次询问, 每次询问给定一个串 \(T\) 和区间 \([l,r]\), 求 \(T\) 中有多少本质不同的子串不是 \(S[l:r]\) 的子串. \(|S|\le 5\times 10^5,q\le 10^5,\sum|T|\le10^6\). 题解 普通的码农字符串题... 获得成就: \(40\texttt{min}(2400\texttt{s})\)…
[LOJ 2146][BZOJ 4873][Shoi2017]寿司餐厅 题意 比较复杂放LOJ题面好了qaq... Kiana 最近喜欢到一家非常美味的寿司餐厅用餐. 每天晚上,这家餐厅都会按顺序提供 \(n\) 种寿司,第 \(i\) 种寿司有一个代号 \(a_i\) 和美味度 \(d_{i, i}\),不同种类的寿司有可能使用相同的代号.每种寿司的份数都是无限的,Kiana 也可以无限次取寿司来吃,但每种寿司每次只能取一份,且每次取走的寿司必须是按餐厅提供寿司的顺序连续的一段,即 Kiana…
kruskal. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxm 1050 #define maxn 2050 #define maxe 2000050 using namespace std; ,father[maxn],mx=; struct edge { long long u,v,w; }e[maxe]; bool cmp(e…
[题解] treap模板题,直接用Treap维护前驱.后继,每次找到更接近当前val的加上就好了. #include<cstdio> #include<algorithm> #define ls (a[u].l) #define rs (a[u].r) #define LL long long using namespace std; ; int n,k,x,y,z,v,tot,root; struct treap{int l,r,v,rnd,size;}a[maxn]; LL s…
呃呃 看到了这道题 没有任何思路-- 百度了一发题解 说要用约数和定理 就查了一发 http://baike.so.com/doc/7207502-7432191.html (不会的可以先学习一下) 然后呢 我们考虑枚举约数 先线性筛一遍10^5以下的 10^5以上的数可以用已经筛过的素因数枚举 最后就搜一下就好了 (记得判断=1的情况) 还有 此题PE很坑爹 不能有行末空格 0的情况不用输出空行 //By SiriusRen #include <cmath> #include <cst…
给出数 $n$记 $f(x)$ 表示 $x$ 的因子和求出所有 $x$ 使得 $f(x) = n$考虑 $x = p_1 ^{a_1} * p_2 ^ {a_2} * \cdots * p_k ^ {a_k}$那么 $f(x) = (1 + p_1 + p_1 ^ 2 + \cdots + p_1 ^ {a_1}) * (1 + p_2 + p_2 ^ 2 + \cdots + p_2 ^ {a_2}) * \cdots * (1 + p_k + p_k ^ 2 + \cdots + p_k ^…