题面在这里! 第一眼感觉炒鸡水啊...只要把N质因数分解一下,因为k次约数相当于求k+2元一次方程的非负整数解,所以答案就是和每个质因子指数有关的一些组合数乘起来. 但是要用pillard's rho啊.... (于是现学了一下,发现不会Miller Rabin...然后又先去学Miller Rabin 23333) Miller Rabin 的部分就不说了...随便找个博客肯定都讲的比我好多了2333 Pillard's rho 的原理就是生日悖论,随机s个数之后两两作差并与n求gcd,当s不…
P4714 「数学」约数个数和 题意(假):每个数向自己的约数连边,给出\(n,k(\le 10^{18})\),询问\(n\)的约数形成的图中以\(n\)为起点长为\(k\)的链有多少条(注意每个点都有自环) 这样想是做不出来题的. 正常的题意是:询问\(n\)的约数的约数的....(共\(k\)次复读后)约数个数和. 考虑\(f_k(n)\)表示答案. 显然有\(f_{k}(n)=\sum_{d|n}f_{k-1}(d)\) 注意到用数论卷积的形式可以表示为 \[ \mathtt f_k=\…
题解: 会了Miller-Rabin这题就很简单了 首先这种题很容易想到质因数分解 但是暴力根号算法是不行的 所以要用到 Miller-Rabin素数 https://blog.csdn.net/ltyqljhwcm/article/details/53045840 对于要判断的数n 1.先判断是不是2,是的话就返回true. 2.判断是不是小于2的,或合数,是的话就返回false. 3.令n-1=u*2^t,求出u,t,其中u是奇数. 4.随机取一个a,且1<a<n /*根据费马小定理,如果…
题目 众所周知,除数个数函数\(\sigma_0=I^2\),\(I\)就是狄利克雷卷积里的\(1\)函数 于是熟悉狄利克雷卷积的话很快就能看出我们要求的就是\(I\times I^{k}\),即\(I^{k+1}\),我们给这个函数起一个名字叫\(f^{k+1}\) 显然这个东西是积性函数,于是我们考虑一下指数次幂的\(f\)如何求 显然 \[f^{k+1}(n)=\sum_{d|n}f^{k}(d)\] 对于指数次幂\(p^m\) \[f^{k+1}(p^m)=\sum_{i=0}^mf^k…
题意: 给你一堆无序数,寻找它的一个子堆,使得子堆的平均数减中位数最大. 数字的个数n<=2e5 0<=xi<=1e6. 思路: 首先可以证明这堆数一定是奇数个,证明方法是尝试在奇数个的有序数列中加入一个数字求平均值和中位数各增加了多少.然后比较一下. 也可以考虑偶数个的序列去掉中间两个中较大的数,差值不会减小. 所以中位数一定是原先堆里的数,我们可以枚举每一个数,然后二分查找范围. 二分查找范围的原理是,随着字串长度的增加,那么差值是先增大后减小的,所以我们枚举某点和它相邻的点的斜率(…
本来想作为水题刷,很快就想出了做法,结果细节实现太差改了好久... 根据题意你会发现其实就是求方程 ax+by=k解的个数. 此时 a=f[i],b=f[i+1],而(x,y)就是你要求的数对. 于是你就对斐波那契的每一项进行扩展欧几里得,然后计算个数,注意向上取整!!! 此时你把y转换为最大值应该是一个y≡n+a*t 而a可以为0,所以要加一. #include<bits/stdc++.h> using namespace std; long long f[100]; void exgcd(…
T29693 取石子 题目描述 Alice 和 Bob 在玩游戏 他们有 n 堆石子,第 i 堆石子有ai​ 个,保证初始时 ai​≤ai+1​(1≤i<n) . 现在他们轮流对这些石子进行操作,每次操作人可以选择满足 ai​>ai−1​ ( a_0 视为 0 ) 的一堆石子,并从中取走一个.谁最后不能取了谁输.Alice 先手,他们都使用最优策略,请判断最后谁会取得胜利. 输入输出格式 输入格式: 第一行一个整数 n(1 < n <100)n(1≤n≤100) ,表示石子堆数.…
T1 签到题 传送门 解题思路 将原式化简一下,让n个1变成 (10^n-1)/9 ,然后再移项,变成了高次同余形式,用bsgs求解.交了好几次都是80,后来才被告知要快速乘. 代码 #include<iostream> #include<cstdio> #include<cstring> #include<map> #include<cmath> using namespace std; typedef long long LL; LL m,k…
A. Simple 本来以为很难,考场瞎推了推好像会了...... 想起小凯的诱惑,迷?? 首先$n$,$m$,$q$同除$gcd(n,m)$,显然$q$以内的数假如不是$gcd$的倍数,那么一定不能被表示 然后在求新的$q$以内不能被表示的数 因为现在$n$,$m$互质,所以$n\times m$至q的数一定能被表示,我们就把范围缩小到$min(n*m,q)$以内 因为在$n\times m$以内,所以取不同$n$,$m$系数时结果不同 所以就因为$m$很小,直接枚举$m$的系数,最多枚举$n…
题意 设\(d(x)\)为\(x\)的约数个数,求\(\sum_{i=1}^{n}\sum_{j=1}^{m}d(ij)\). 题解 首先证个公式: \[d(ij) = \sum_{x|i}\sum_{y|j} [gcd(x,y)=1]\] 可以这么考虑:利用唯一分解定理把\(i,j\)分解,即: $i=\prod_{k = 1}^{m} p_k^{c_k},j=\prod_{k=1}^m p_k^{d_k} $ 那等式左边显然为\(\prod(c_k+d_k+1)\), 然后考虑等式右边在干什…