
数论
文章平均质量分 60
Forward in time
永不停止前进
展开
-
https加密
此篇文章仅自己书写过底层代码书写,用于记录学习过程,以便以后复习。所用到的抓包工具为wireshark。找一个ip不变的网站,然后用浏览器访问进行抓包分析。TCP三次握手是前提。以下只说明加密解密过程。client向server发送随机数+加密算法列表server自己生成私钥,并且从ca机构得到证书,证书中包含了ca的公钥。并且RSA非对称加密解密,生成数字证书。在client端,使用ca的pub_k解密数字证书得到s.pub_k,然后用s.pub_k对发送的数据加密(数据有随机数R原创 2021-09-04 12:04:35 · 320 阅读 · 1 评论 -
The Oculus(自然溢出ll)
这个题我只有一个想法,计算机底层学的不好。自然溢出的mod的值居然刚好是2^64,这个溢出对于fabonacci居然是不同值。其实我maxn起初开的60,如果我无意间开成2e6+10直接就A了。可惜考虑到溢出就没敢开。。。。。确实想不到居然是这种操作。AC代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll maxn=2e6+10;ll fa[maxn];ll init(){ fa.原创 2020-07-26 11:47:05 · 420 阅读 · 0 评论 -
Fibonacci Sum(二项式求和)
这道题没写过类似的感觉确实不好想,考点在与二项式求和优化等式。特别是优化等式这里,是真的坑。废话不多说,上推到过程:因为:可以有:所以有二项式展开:很明显竖起来是等比,所以这样就可以把复杂度变成klogn了;然后可以得出公式S结果公式为:由于需要mod1e9+9,所以可以由费马小定理可知变形为:qi的值和阶乘的值都可以预处理,但是你会发现如果直接带这个公式写出来就T了。这就是真的变态卡快速幂。。。。。。。。。这是我超时的代码:#include<bits/stdc++.h.原创 2020-07-25 18:13:11 · 2133 阅读 · 1 评论 -
GCD(莫比乌斯反演(数论公式+结论+因子个数)
这道题是真的好题!!!!我也是头一次搞莫比乌斯反演,没想到那么有用,但是的确对于它的理解是很有难度的!!!题的意思很简单就是求在[a,b]区间取出的x和[c,d]区间取出的y使得gcd(x,y)==k的对数(注意这里的<x,y>为序偶(也就是有顺序));当时我拿着这个题,一脸的懵逼,QAQ;然后百度了一下说是莫比乌斯反演;那什么是莫比乌斯反演呢?其实我感觉如果要去证明是很难看...原创 2019-08-24 20:39:52 · 1051 阅读 · 0 评论 -
C. Common Divisors(数论:求n的因子个数+唯一分解定理)
题意:发现所有数字相同的因子的个数;回忆一下唯一分解定理的相关结论:很明显因子相同那么肯定是能满足都能整除,所以我们只需要找到这n个数里面最大的因子,也就是gcd(a0,a1,a2…,an);所以首先扫一遍求最大gcd;然后再求最大gcd的因子个数:因为如果最大的能被整除,那么它的因子肯定能整除其他数字;#include<bits/stdc++.h>using name...原创 2019-08-15 12:42:57 · 343 阅读 · 0 评论 -
神奇函数(数论欧拉表+特殊数列求和结论)
这道题一开1e13,枚举爆表,所以找规律,但是我还是没有找到QAQ;我可以根据定义手写前几项:1 1 1 2 1 1 1 2 3 1 1 2;然后没找到规律,然后OEIS;结果得到了:然后没什么用,因为这只是f[i]的通项,然后继续搜,得到了求和公式:然后枚举i*i就出来了;都是数论结论,但是我不知道怎么推导QAQ;#include<bits/stdc++.h>...原创 2019-08-10 13:06:56 · 375 阅读 · 0 评论 -
A - Prime Distance(区间素数筛[a,b],注意不是[a,b))
题意:找[L,U]区间里面的递增的素数序列;求相邻差值最小和差值最大的两对素数;如果没有就输出There are no ahjacent primes;很明显区间素数筛;但是注意一点:这里是两边都是闭区间,白书上是半闭半开;所以AC代码:#include<iostream>#include<cstdio>#include<vector>#incl...原创 2019-08-19 15:56:50 · 236 阅读 · 0 评论 -
A - How Many Points?LightOJ - 1077(gcd+数学证明)
我相信这道题题意很简单,就是求平面上x0y两点中间整数点的个数(包括端点);也就是格点;其实题目上什么是格点已经说了;就是x,y轴都是整数的点;答案分为两种情况:1.斜率不存在,答案就是abs(Ay-By)+1;2.斜率存在,答案就是gcd(abs(Ay-By),abs(Ax-Bx))+1;第一种情况很容易理解(用笔画一下就出来了);第二种证明:注意这里的gcd为gcd(abs...原创 2019-08-18 17:35:19 · 161 阅读 · 0 评论 -
N - Trailing Zeroes (III)(阶乘后导0+数论结论+二分)
题目意思很简单,给你Q表n阶乘的后导0个数,然后求n的最小值;这里有个数论结论,就是n!尾部数的个数就是n!的5的因子的个数;所以可以用一个while循环算出n!的尾部0个数;因为这里是要求最小的n,比如:10!和14阶乘它们尾部的0的个数都是一样的所以10是最优选择,所以需要最后处理一下;然后就是怎么找这个n了,我可以用二分来找这个n使得n!这个后导0个数等于Q所以AC代码:#inc...原创 2019-08-13 16:59:31 · 156 阅读 · 0 评论 -
G - Problem G. Cyclic(打表+特殊数列)
题意:给你一个长度为n的数列(1----n);问把它排成满足任何一个数的后一个不能比它的前一个大一的方案总数;这道题我是OEIS的,QAQ;直接通式:#include<bits/stdc++.h>using namespace std;typedef long long ll;#define Mod 998244353ll a[100200];void P(){ a[1...原创 2019-08-06 17:32:47 · 199 阅读 · 0 评论 -
【XR-3】小道消息(数论)
这道题刚开始我真没读懂,后面才发现这个意思:第0天传给第k个人,然后第k个人在第一天传给所有与它互质的人;如果能传递完那么就是一天就结束了;如果不能传递完那么就需要两天;为什么呢?因为这里用到了一个数论结论:如果第k个人对应的k+1这个数是个素数,那么如果它的两倍超过了n+1那么肯定其他数与它互质;比如2 3 4 5 6,k=4那么5与其他都互质,所以传递只需要一天就完了,其实也可以这样理...原创 2019-08-27 10:39:30 · 268 阅读 · 0 评论 -
PowerOj 2366: Problem D(欧拉降幂)
首先我来看这个东西(就是欧拉降幂的结论):对于很大的幂,那么第一种就是如果a与p互质,那么就用第一个结论;如果a,p不互质并且b<phi§那么就用第二个结论;如果a与p不互质并且b>=phi§那么就用第三个结论;那么这里的phi§是什么呢?其实就是求的[1,n)中与n互质的数的个数;这个是有模板的(其实这是一个欧拉函数);但是麻烦的就是这个问题;1.互质,2.b与phi§的大...原创 2019-09-02 19:54:08 · 148 阅读 · 0 评论 -
Exponial(数论+Euler降幂+快速幂+递归)
这道题题意很简单就是求这个东西:其实我觉得最不安逸的就是题读懂了,写不来,眼睁睁的看着别人AC,唉。。。。。。不论怎么说,我感觉还是知道了欧拉降幂这个知识点,以前我只知道快速幂,矩阵快速幂,今天还遇见了欧拉快速幂,真的佩服前人的智慧;我前面写过一个简单的2阶的幂,也是用的欧拉降幂,但是这个题好像更复杂一些;因为涉及到递归问题;说实话欧拉降幂我只是记得到结论,但是这个题至于为什么没有...原创 2019-09-02 20:11:16 · 313 阅读 · 0 评论 -
数数(数学题运算分配律)
这道题,你把每个写出来,可以发现可以提出来;然后直接预处理+快速幂就AC了:#include<cstdio>#include<iostream>using namespace std;const int Mod=998244353;long long qp(long long x,long long n){ long long res=1; while(...原创 2019-09-15 11:54:25 · 507 阅读 · 0 评论 -
斐波那契数列卷积(矩阵快速幂+费马小定理)
这个题的名字好高大上哦(:我打了一下表,然后OEIS到了这个数列;可以用斐波那契数列求的;自己推还是不太现实,我感觉所以套结论了,嘻嘻;这个通项为:其中F(n)是斐波那契数列,所以很明显n为1e18所以上矩阵快速幂;求出分子,然后最后用费马小定理;什么是费马小定理呢?就是这个东东,然后就是怎么求F(n)呢?很简单,可以构造一个矩阵:然后手写快速幂;最后取Mod;然后输出答...原创 2019-09-20 21:16:46 · 491 阅读 · 0 评论 -
组合数(思维题+__int128)
题意很简单吧;就是算C(n,k)和1e18的大小;如果你手写一下就可以把C(n,m)写成:可以很明显发现分子最左边的n-k可定小于分母最后边的n-k+1;所以他们能相同约分;然后就有一个new知识点了!!__int128这个是只能在计算时使用的数据类型,不能在输入输出的时候使用;所以这道题我就可以这样想:如果我从[1,k]去枚举,那么肯定就是这样枚举滴:如果我连乘算出来之后&...原创 2019-10-01 18:48:40 · 316 阅读 · 1 评论 -
A - Chat Group(组合数+费马小定理)
这道题,题意比较简单,就是问你,从n个你们选至少k个人,问能组成多少队?很明显从n个里面选k个不就是组合数吗?所以可以很快推出公式这个:当时我没注意n是1e9,结果wa了一次;之后想了想可以从枚举k的角度思考;因为最后答案应该是:所以最后答案就出来了;但是怎么计算呢?带模板?我带了wa了QAQ,后来队友找了一下这个东东:这样就可以解决了;下边的 公式是费马小定理,用于...原创 2019-10-03 14:32:32 · 421 阅读 · 0 评论 -
L. Ultra Weak Goldbach's Conjecture(数论(大素数判断)+素数筛+哥德巴赫猜想)
题意:叫我们去证明这个题的猜想,通过输出答案来证明;首先需要知道著名的哥德巴赫猜想:任意一个大于2的偶数,均可以有两个素数的和表示出来!!然而这个题猜想是:对于大于11的数,他能由6个素数的和组成,然后让我们找出这6个素数,其中可以是相同的素数;这里需要用到的数论常识结论:1.对于素数除了2,其余素数均为奇数;2.奇数个奇数相加等于奇数;3.奇数+或者-奇数结果为偶数;4.奇数+或...原创 2019-10-04 20:31:26 · 608 阅读 · 0 评论 -
Divisors of the Divisors of an Integer(唯一分解定理+数理乘法原理)
这道题应该容易想到唯一分解定理吧(:题意d(n)是求出[1,n]中为n的因子的个数;但是sndd(n)又是求n的因子有哪些,并且把他的每个因子给d(n的因子)一下;然后求和;这道题看起来就是数论题;然后我就想到了唯一分解定理;因为一个数可以被分解为:其中pi为素数,这个可以打表解决;然后由数论知识可知道x的因子个数有:,这个多个;所以这大概就是唯一分解定理的知识了;所以...原创 2019-10-07 16:25:11 · 578 阅读 · 0 评论 -
I - Problem I. Count(欧拉表+规律)
没智商这道题都洗白了,QAQ;首先来理解这个:[gcd(i+j,i-j)=1]就表示不超过1的最大整数就只有0,1所以这表示,在枚举中的满足条件的个数;当然想到这个就会想到eular函数了;但是我始终没有想到这和eular表扯上关系,唉;但是找到关系还是很好写的:如果i(2=<i<=n)那么就是sum[i]=sum[i-1]+phi[i]/2;如果为偶数sum[i]=sum...原创 2019-08-06 17:24:48 · 369 阅读 · 0 评论 -
J - Mysterious Bacteria(唯一分解定理+素数筛)
题意:就是给你一个等式x=b^p,现在给你x,b未知,求p的最大值;这道题我一读,没感觉呢?但是应该想得到唯一分解定理:p1,p2…pn是素数,这个可以打表解决;但是怎么求p最大呢?可以多写几个例子比如:其实就可以大概推测出来p=gcd(x1,x2,x3…xn);所以很明显素数表扫一遍就OK;但是注意了:x可以是负数,所以它的p只能是奇数次幂;还有一点需要注意一个数论结论:如果一...原创 2019-08-13 13:58:57 · 223 阅读 · 0 评论 -
I - Harmonic Number(调和级数求和)
这道题需要的预备知识:当n比较小的时候打表,打的时候带公式;分界线可以是1e5或者1e6都可以;我这里是1e5;#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll maxn=1e5+5;const double r=0.57721566490153286060651209...原创 2019-08-13 12:59:44 · 348 阅读 · 0 评论 -
C - Aladdin and the Flying Carpet(数论结论+思维)
这道题应该是我的反思题。我明明找到了a的约数个数/2-a在b一下的约数个数==答案;但是没看到题是不能是正方形wa惨了,为什么会有这个答案?其实多找几组就可以看出来注意这里题上说b可能为边长,所以必须是从【1,b)中的a的约数个数!!!#include<map>#include<list>#include<ctime>#include<qu...原创 2019-07-22 20:43:48 · 461 阅读 · 1 评论 -
F - Goldbach`s Conjecture(数论+枚举)
签到题,直接枚举([2,n/2]因为其他的都是对称的)就OK,当然在判断素数的时候不能judge函数,因为用了judge肯定TLE了。AC代码:#include<map>#include<list>#include<ctime>#include<queue>#include<deque>#include<cmath...原创 2019-07-23 10:43:41 · 209 阅读 · 0 评论 -
I - Counting Divisors(区间素数筛)
这个题以前我就遇见过,结果不会写,现在终于搞懂了。这道题整体思路就是首先我们需要知道一个约数定理:这里的p1,p2…pn为质数,d(x)表示约数个数。知道这个定理之后我们可以推到出关于幂的结论:多个x相乘 好理解吧,指数运算高中的;d(x^k)=k+1如果x为素数很好理解带入公式(1不是素数)这样就解决了一半了,下面一半我们就应该找每个的d(x^k)了,这里就有问题了,如果直接...原创 2019-07-20 14:45:15 · 187 阅读 · 0 评论 -
J - Swaps and Inversions HDU - 6318
这道题考了逆元知识,有个很重要的结论:逆序数对数==把这个数列排成递增序列所需要的次数(每次只能换相邻的)有了这个结论就OK了。#include <stdio.h>#include<map>#include <set>#include <stack>#include <queue>#include <vector&g...原创 2019-07-20 10:35:40 · 149 阅读 · 0 评论 -
K - Time Zone HDU - 6308
这道题有一个周期公式(写题最好都化为最低单位来计算)以后算周期变化都可以直接用(n为N*)。还有这道题考了一个常识UTC的问题(cf每次提醒但是自己没注意这个,╮( ̄▽ ̄")╭),我当时还在往上搜了UTC 才搞明白,地球化为24个时区UTC+表示东区,UTC-表示西区,并且每隔一个区相差一个小时(原谅我的地理太差)。明白了这个我才知道-和+时的时间怎么算。#include<cstdi...原创 2019-07-20 10:21:19 · 172 阅读 · 0 评论 -
M - Help Hanzo(模拟素数筛思想+优化)
题目意思就是求[a,b]的素数个数。这道题我一看枚举不就完了吗? 但是看到那个2^31次方就知道了,如果枚举肯定TLE了;所以百度了一下说模拟素数筛。我觉得我自己有必要回忆一下素数筛原理。#include<iostream>#include<string>#include<cstring>using namespace std;typedef lo...原创 2019-07-23 12:15:02 · 217 阅读 · 0 评论 -
B. Odd Sum Segments(基础数论 奇数个奇数相加==奇数,奇数个奇数+偶数==奇数,奇数+奇数==偶数)
这道题如果对数论熟悉点的就会想到这个只和奇数个数和分块有关。且当count%2==k%2时才能分块;所以这样就OK了,注意输出的是右边界所以这里k需要提前减1;分析条件:因为和偶数个数没关系,所以我只写奇数。所以可以知道条件了;AC代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;...原创 2019-07-25 09:46:09 · 904 阅读 · 0 评论 -
烤面包片(思维题+数论)
这道题首先应该知道4!!!已经远远大于1e9了,而且由数论知识(唯一分解定理)可以知道:一个大数肯定可以由素数的乘积组成,那么阶乘就可以想成:那么一个很大的数肯定会有与Mod相等的因子,所以当n>=4的时候肯定n!!!%Mod0了;reason:因为24!!这个数相当大,所以因子以及足够包含1e9内所有数的因子个数和类别了;那么 n0,1,2就可以手算,n==3就可以算3!...原创 2019-07-28 20:31:45 · 273 阅读 · 0 评论 -
A - Bi-shoe and Phi-shoe(数论欧拉+枚举)
这道题,我一看题,就欧拉打表,然后搜,但是如果一个一个从1开始搜,肯定TLE了,之后还是百度了一下,但是知道了欧拉函数的性质感觉还是学到了知识:知道了这个就能降低时间复杂度了,但是题目给的是phi[m]叫我们求大于等于phi[m]的最小x ,估计读到这里不知道怎么下手了。其实和前面的思路一样都是枚举,只不过我们利用这个性质就把时间复杂度降低了。(上面的图片中phi[m]=m-1是用不到的...原创 2019-07-22 10:51:41 · 179 阅读 · 0 评论 -
H - Pairs Forming LCM(数论)
我开始找了一下规律,以为直接n-euler(n)+1就完事了,结果发现不对因为当n等于8的时候 漏了6这个数所以百度了一下这个题怎么写,唉。。。。。又遇到了素数筛和唯一分解定理。但是这次我看了一位大佬的讲的真的好!!!当我看这个题解的时候,我发现这个用到了高中的独立事件。但是自己仔细下来想了一下确实应该是这样,因为我们知道任何一个数都能用素数的乘积表示出来,而且每个素数的事件是独立的...原创 2019-07-21 17:04:36 · 217 阅读 · 0 评论 -
P - Submarine in the Rybinsk Sea (easy edition)(数论思想+规律)
这道题挺有意思的;如果够聪明的话直接可以大概猜出来结果;但是我没那么聪明,嘻嘻;这道题一看两个连加符号:然后n又是1e5,然后nn肯定就爆了,所以枚举肯定不行,所以只有走找规律的这条路了;根据他的f函数定义,可以知道这个结论:为什么有这个东东呢?可以这样想,因为每次a1都会遍历所有的aj,a2也同理…an也同理;我可以这样想:有点像错位相加的感觉(因为这个每个数的长度相等):...原创 2019-08-06 13:13:18 · 254 阅读 · 0 评论 -
B - Zero Array(思维题)
这个题很是打脑壳,没我感觉;但是仔细想一下还是能想明白:对于一个数组任意去两个来抵消,并且两个选的数的下标不能一样(就是自己和自己抵消);如果按照常规的想法去想,是不是枚举,然后抵消?(但是想的出来吗?);所以我可以这样想:如果数组里面的数的总和是奇数那么就肯定不能抵消完,难道不是吗?还有一点就是,因为选的是两个,所以这个数组里面数的所有的和求出来之后,如果最大的一个数的2被大于这个...原创 2019-08-06 12:39:48 · 606 阅读 · 1 评论 -
C0170 [2002普及组-A]级数求和
直接枚举:#include<bits/stdc++.h>using namespace std;int main(){ double k,sum=1; int n=1; scanf("%lf",&k); while(sum<=k){ n++; sum+=1/(1.0*n); } printf("%d\n",n); re...原创 2019-08-01 20:41:07 · 209 阅读 · 0 评论 -
R - 青蛙的约会(扩展欧几里德)
这道题我按照题的意思自己到是把等式写出来了,但是因为我知道有扩展欧几里德所以自己就算不来,后来百度和优快云搜了一下,到时觉得计算机很强大!!可以解方程(同时也了解到了扩展欧几里德,还是很欣慰得);根据题意我把等式列了出来:因为他们用的时间都是一样的,所以我这里设为t;我可以把上式简写为:然后可以写成:这里是根据对照系数法写的哈;黑色的x,y和蓝色的x,y不是一回事哈;这样我...原创 2019-07-26 20:00:26 · 168 阅读 · 0 评论 -
S - C Looooops(我写的第二道扩展欧几里德题目)
这道题当时我列的是等差数列:这样就根据扩展欧几里德求得n;但是我不知道为什么我求的n是比正常答案大了1,我后面减了一个1,但不知道为什么还是过不了,所以后面只好百度了一下,看了别人的题解,最后自己才理解到了(但是我也不知道我的写法错在哪里了);所以只好这样写了:(其实我认为用等差数列和周期都可以写的,但是不知道为什么等差数列就不行了(因为最小整数周期问题???(我猜的)));现在来按...原创 2019-07-26 20:27:48 · 189 阅读 · 0 评论 -
M - Just do it(数论)
https://blog.youkuaiyun.com/a7f650ebd327889c/article/details/77248792转的大佬的,因为这个规律实在不好找而且我现在对那个贡献也只是短浅的理解原创 2019-07-20 15:01:49 · 94 阅读 · 0 评论 -
G - Harmonic Number (II)(规律+数论思想)
这道题是真的坑人,我一拿到就想到调和级数,结果公式log(n)+r+1/(2*n)算出来的结果不对。然后我问了同学,他说找的规律,后来我想了半天才发现有这个规律,但是在输出的时候又有误差。唉…最后还是WA了几下!首先来看看这个规律:我开始是打的表来找规律然后按照题的要求多带几组n值进去算出对应的H(n);可以发现答案居然就是 然后那么问题来了,怎么找到前面的和 和 后面的和呢?这...原创 2019-07-21 16:54:10 · 209 阅读 · 0 评论 -
C0002 [1998提高组-A]车站(斐波那契数列)
这道题很有意思;考察的斐波那契数列,首先我可以根据题意列出下面的表来:上面的上车人数和下车人数是可以抵消的(因为上一站上车人数,不就是和下一站下车人数相同吗?所以这里就可以抵掉了);然后我把上车的系数给找出来(因为最后要算x,不然你怎么知道第几站是多少人了?嘻嘻);通过对比系数关系,就可以知道,站数对应的fibonacci数列的下标(对站数对应的a的系数所对应的fibonacci数列的下...原创 2019-08-03 13:23:25 · 170 阅读 · 0 评论