素数

周总结(七)【2019.8.12-2019.8.18】

自作多情 提交于 2019-11-27 17:46:11
本周进行了不少的C++代码练习,刷题期间遇到过很多问题,但慢慢也就解开了,接下来进行一下总结。 题目里有不少输入数据不再是以前那样先规定数组长度,再进行输入,而是输入未知长度的数据,这个情况下面临的问题是如何结束输入的循环。由于输入数据时往往两个数据之间要空格隔开,所以需要键入回车键来终止循环。在翻阅了不少前辈的博客之后,我最终学会的判断方式是cin.get()=='\n',以此来判定是否输入了回车键。 第二个错误并不是技术上的,而是审题问题,在写PTA-1012-数字分类的时候,我因为审题失误一直出错,输入样例与输出样例中的A4一直对不上,最后才发现第一个输入数字是规定数组长度。这种错误就只能看自己能不能足够细心,还有一些那种比较复杂的数学类的题,我之前在跟学长们参加比赛的时候遇到过,光是题目就没有理解是什么意思,根本无从下手,这样的情况只能通过增加阅历来解决它。 在刷题中,不少题目在数据范围上动了手脚,用循环时稍有差错便会报“运行超时”,比如输出素数时。我记得输出素数是编程书中一个典型的例题,老师也提到过。通常是一直用数a去除以数b,b从2开始一直自增到a-1,如果均不能整除便为素数。这个循环在求那种数据很大的素数时极易超时。后来的改进是数b从2一直自增到sqrt(a),还有其他的改进方法,但我目前只能熟练运用这种。其他的数据范围易错点就是定义变量类型时的问题,比如是long

字符串Hash入门(转载)

回眸只為那壹抹淺笑 提交于 2019-11-27 15:07:19
字符串Hash入门 Hash方法 自然溢出方法 Hash公式 单Hash方法 Hash公式 举例 双Hash方法 Hash公式 获取子串的Hash 例子 公式 字符串Hash的应用 题型一 描述 解法 题型二 描述 解法 题型三 描述 解法 题型四 描述 解法 Hash素数的选取 字符串Hash入门 字符串Hash可以通俗的理解为,把一个字符串转换为一个整数。 如果我们通过某种方法,将字符串转换为一个整数,就可以便的确定某个字符串是否重复出现过,这是最简单的字符串Hash应用情景了。 当然也不难想到,如果有不同的两个字符串同时Hash到一个整数,这样就比较麻烦了。我们希望这个映射是一个单射,所以问题就是如何构造这个Hash函数,使得他们成为一个单射。不用担心,接下来的内容正要讲解。 Hash方法 给定一个字符串S=s1s2s3..snS=s1s2s3..sn,对字母x,我们规定idx(x)=x−′a′+1idx(x)=x−′a′+1。 (当然也可以直接用sisi的ASCIIASCII值) 自然溢出方法 Hash公式 unsigned long long Hash[n] hash[i]=hash[i−1]∗p+id(s[i])hash[i]=hash[i−1]∗p+id(s[i]) 利用unsigned long long的范围自然溢出,相当于自动对264−1264−1取模

1到100质数 (素数) 和

北城以北 提交于 2019-11-27 13:38:09
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数; 否则称为合数:基本判断思路 在一般领域,对正整数n,如果用2到 之间的所有整数去除,均无法整除,则n为质数。 质数大于等于 2 不能被它本身和1以外的数整除 1 $arr = array(); 2 3 for ($i=2; $i<=100; $i++){ 4 $str = false; 5 for ($j=2; $i<=4 ? $j<$i : $j<=$i/2; $j++){ 6 7 if ($i % $j == 0){ 8 $str = false; 9 break ; 10 }else{ 11 12 $str = true; 13 14 } 15 16 } 17 18 if($str){ 19 array_push($arr,$i); 20 } 21 22 } 23 echo print_r($arr); PHP $arr = array(); for ($i=2; $i<=100; $i++){ $str = false; for ($j=2; $i<=4 ? $j<$i : $j<=$i/2; $j++){ if ($i % $j == 0){ $str = false; break ; }else{ $str = true; } } if($str){ array_push($arr,

数论

家住魔仙堡 提交于 2019-11-27 10:45:57
基础数论 声明 : 参考课件来自PoPoQQQ(虽然我不认识他),讲授来自Accelerator 整理就是我这个juruo做的 基础知识 gcd和lcm gcd(x,y),简记为(x,y),表示两个数的最大公约数 lcm(x,y),简记为[x,y],表示两个数的最小公倍数 设x=∏pi^ai,y=∏pi^bi 那么(x,y)=∏pi^min(ai,bi),[x,y]=∏pi^max(ai,bi) 由于min(ai,bi)+max(ai,bi)=ai+bi,故有(x,y) [x,y]=x y 同余公式 (a+b)%p = (a%p + b%p) %p (a-b)%p = (a%p - b%p) %p (a b)%p = (int)( (LL) (a%p) (b%p) % p ) 除法怎么办??? 看下面 乘法逆元 定义:对于任意x∈[1,p),若(x,p)=1,则存在唯一的正整数inv[x]∈[1,p)满足x*inv[x]≡1(mod p),我们称inv[x]为x在模p意义下的逆元。 a/x=a* 1/x=a*inv[x] (mod p) 这说明,当我们需要除掉x的时候,我们只需要乘上x的逆元就行了。 求乘法逆元 扩展欧几里得(exgcd 用途:求出方程ax+by=gcd(a,b)的一组解,其中a和b已知,x和y未知 模仿欧几里得算法,假设我们得到了一组解x2和y2满足: b* x2

网络安全 与 加密算法

大兔子大兔子 提交于 2019-11-27 07:12:33
计算机中的网络安全 在本篇中介绍了以下几个方面: 机密性 密码学 对称加密算法(DES, 3DES, AES) 公开秘钥算法 RSA大素数的获取 完整性 散列函数(MD5, SHA-1, 并没有提及算法实现) 报文鉴别(MAC) 数字签名 端点鉴别 应用 SSL(TCP网络安全) 运行时安全 防火墙的基本知识 主要体现在以下几个方面: 机密性, 即发送的信息只有双方彼此能够解读,其他人以任何方式皆无法解读。 报文完整性, 即接收方需要能够验证,当前接收到的数据是完整的,没有被经过篡改的。机密性与完整性是相互独立的两个属性。 端点鉴别, 需要知道我收到的消息, 确确实实是来自于对方, 而不是恶意方伪装的。 运行性安全, 需要能够识别并阻拦恶意攻击。如 Dos攻击等, 其目的并非为了窃取信息,而是使得系统瘫痪, 无法运行。 机密性 首先来看机密性问题, 小明和小红之间发送的有效信息 不希望被第三方解读。 而实现这点的方式自然是, 加密, 加密,就需要相关的密码。 密码学 加密所要实现的根本目的是,将数据加密,除非拥有相关的秘钥,算法,才能够 也 必须能够 将数据恢复到 原始数据。 这里的原始数据被称作 明文 , 小明使用了 加密算法 加密其明文, 生成的文本为 密文 , 加密算法是公知的,而 秘钥 是私有的. 对称秘钥体系 凯撒密码 是一种简单的加密算法。 对于字母而言, 约定 用

day3(数论)

瘦欲@ 提交于 2019-11-27 01:01:51
总 得来说,这是可怕的一天,极其可怕的一天 (完) 一、数论 阴影啊! 首先,设ab为两个整数,则存在唯一的q和r,使得a=qb+r 若r=0,则b整除a,记作b|a。 (1)同余 若a/m和b/m的余数相同,则称a于b对模m同余,记作a ≡ b (mod m) 剩余系:在模 m 的意义下,余数相同的数归为一个集合,那么所有整数被分为 m个不同的集合,模 m 的余数分别为 0,1,2,3,...,m − 1,这些集合被称为模 m 剩余类(同余类)。每个同余类中的任意两个整数都是模 m 同余的。__by dzy(就是模m的余数集合) 若是剩余系遍历了0~m-1,则叫做完全剩余系 同余式的三则运算: 设 a,b,c,d 为整数,m 为正整数,若 a ≡ b (mod m),c ≡ d(mod m),则: ax + cy ≡ bx + dy (mod m),其中 x,y 为任意整数,即同余式可以相加() ac ≡ bd (mod m),即同余式可以相乘a n ≡ b n (mod m),其中 n > 0 f(a) ≡ f(b) (mod m),其中 f(x) 为任一多项式。 a n ≡ b n (mod m),其中 n > 0 (2)素数 判断素数的方法:一般是从2开始,枚举到√ n,依次判断i是否能整除n,若n=pq,则pq中的一个必定小于等于√ n。 但是,如果硬生生跑√ n

素数阶群必为循环群

怎甘沉沦 提交于 2019-11-26 22:45:22
前言:仅个人小记。素数阶群必为循环群,这个性质很重要,尤其是在密码学中,我们 总是引入素数阶的群 ,这个性质保证了我们引入的群具有循环群的一切特征,包括 交换性、具有生成元 。 前要知识 群论中的拉格朗日定理(子群的阶必然能整除群阶) 。参看 https://blog.csdn.net/qq_25847123/article/details/100318620 素数 p 以内的正整数都与 p 互质。 素数阶群只有平凡子群 {e} 和 G ,不存在非平凡子群。证明如下: 因为群 G 的阶为素数 p,且由 前要知识2 知,素数 p以内的正整数都与 p 互质,故而 G 的子群的阶 不可能是 { 2 , 3 , . . . , p − 1 } \{2,3,...,p-1\} { 2 , 3 , . . . , p − 1 } 故而 G 的子群的阶 只有可能为 { 1 , p } \{1,p\} { 1 , p } 换言之,素数阶群 G 只可能有平凡子群 {e} 和 G , 不存在非平凡子群 。证毕! 证明 群 G 中的任一元素 a 都可以构建一个循环子群 H,具体为 H = { e , a , a 2 , . . . , a k } H = \{e,a,a^2,...,a^k\} H = { e , a , a 2 , . . . , a k } 由 前要知识3 知道,对于素数阶群

数据结构 : Hash Table [II]

时光怂恿深爱的人放手 提交于 2019-11-26 21:44:27
书接上回 数据结构 : Hash Table [I] 。 上篇文章,我们知道了散列函数会使得 Key 发生碰撞冲突。 那么,.NET 的 Hashtable 类是如何解决该问题的呢? 很简单,探测。 我们首先利用散列函数 GetHashCode() 取得 Key 的散列值。为了保证该值在数组索引范围内,让其与数组大小求模。这样便得到了 Key 对应的 Value 在数组内的实际位置,即 f(K) = (GetHashCode() & 0x7FFFFFFF) % Array.Length。 当有多个 Key 的散列值重复的时候(即发生碰撞冲突时),算法将会尝试着把该值放到下一个合适的位置上,如果该位置已经被占用,则继续寻找,直到找到合适的空闲的位置。如果冲突的数量越多,那么搜索的次数也越多,效率也越低(无论是线性探测法,二次探测法,双散列法都会这样寻找,只不过寻找的偏移位置算法不同而已,.NET Hashtable 类使用的是双散列法)。整个过程如下图所示: 如果散列表的容量接近饱和时,找到合适的空闲的位置将会很困难,而且发生碰撞冲突的几率也很大。这个时候,就要对散列表进行扩容。那我们根据什么来判断应该扩容了呢?根据散列表内部数组容量和装填因子。当散列表元素数量 = 数组大小 * 装填因子时,就应该扩容了。 .NET Hashtable 类默认的装填因子是 1.0

6.找素数

倾然丶 夕夏残阳落幕 提交于 2019-11-26 19:49:27
设一个等差数列,首元素为367,公差为186, 现在要求找出属于该等差数列中的第151个素数并输出。 格式:CTF{xxx} num = 367 d = 186 count = 0 while 1 : num = num+d max = int(num/2) for i in range(2,max+1): if num % i == 0: break if i == max: count += 1 if count == 150: print("CTF{%d}"%num) break 来源: https://www.cnblogs.com/DennyT/p/11331498.html

1446:素数方阵 90'代码

*爱你&永不变心* 提交于 2019-11-26 19:34:35
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<math.h> using namespace std; bool qz[100000]; bool hz[100000]; int djx1,djx2; int l[6],r[6]; int m,n; int sum; int fz[5]={1,10,100,1000,10000}; bool search(int o) { if(o%6!=1&&o%6!=5)return 0; for(int i=5;i<=(int)(sqrt(o));i+=6) if(o%i==0|o%(i+2)==0)return 0; return 1; } void dfs(int x,int y) { if(y==6) { y=1; x++; } if(x==6) { for(int i=1;i<=5;i++) printf("%d\n",l[i]); sum++; printf("\n"); return; } for(int i=0;i<=9;i++) { if(qz[l[x]*10+i]==0)continue; if(qz[r[y]*10+i]==0)continue; if(x==y&&qz[djx1*10+i]==0