2020-09-27大二第四周

这周又是一个忙碌的一周,除了必要的课程和工作以外,还在学习暑假落下的算法课程,以及差了一点的c++。

周四在codeforces上有比赛,但是不知道为啥宿舍网断了,开手机热点结果卡的要死,加载出来的题中的字母都是带着latex那样的,看着也不清楚,在最后几分钟它终于加载出来,结果没做上啥就到时间了……决定等大佬们出题解之后看看。

周六那天听同学的讲课也受益匪浅,把一些重要的经常用的函数等进行了总结与讲解。给同学们了一些使用的模板。

一般筛法(埃拉托斯特尼筛法,之后简称为埃筛):

基本思想:素数的倍数一定不是素数

实现方法:用一个长度为N+1的数组保存信息(0表示素数,1表示非素数) 先假设所有的数都是素数(初始化为0) 从第一个素数2开始,把2的倍数都标记为非素数(置为1),一直到大于N; 然后进行下一趟,找到2后面的下一个素数3,进行同样的处理 直到最后,数组中依然为0的数即为素数。

线性筛法(欧拉筛法):

我们发现在上面的筛法中有的数字是多个素数的倍数,也就是说它可能会被重复计算多次,比如说6同时是2与3的倍数,它在计算时就被访问了两次,这样会导致效率低下,所以在下面的算法中我们考虑如何优化这种情况。

原理:

任何一个合数都可以表示成一个质数和一个数的乘积

假设A是一个合数,且A = x * y,这里x也是一个合数,那么有:

A = x * y; (假设y是质数,x合数)

x = a * b; (假设a是质数,且a < x——>>a < y)

-> A = a b y = a Z (Z = b y)

即一个合数(x)与一个质数(y)的乘积可以表示成一个更大的合数(Z)与一个更小的质数(a)的乘积,那样我们到每一个数,都处理一次,这样处理的次数是很少的,因此可以在线性时间内得到解。

算数基本定理:

算术基本定理:任何一个大于 1 的自然数可以分解成一些素数的乘积;并且在不计次序的情况下,这种分解方式是唯一的。

同余:给定一个正整数m,如果两个整数a和b满足a-b能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,记作a≡b(mod m)。对模m同余是整数的一个等价关系。

还不是特别懂它的意义何在,决定再找点书或者资料看一下。

下周又要学习新的知识了,加油!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值