本周总结 Miller_Rabin Pollard_Rho

这周主要对之前做过的一些题目和知识点回顾复习了一下,最大的感受是学的越多,忘得越快,学了新的,忘了旧的,但反正比第一次刚学的时候好多了, 复习的过程中一些代码还是不熟,知道咋回事,但写起来却费劲。 有关新的算法看了看Miller_Rabin和Pollard_Rho,觉得有这样几点注意的地方,第一点是快速乘最好写成
return (a * b - (long long)((long double)a * b / mod) * mod + mod) % mod;这种形式,因为是对1e17,1e18级别的数的操作,这样会比使用普通的快速乘快上很多,时间大大减少,二是使用随机函数最好使用
long long a = rand() % (n - 1) + 1;这种形式,或者是 使用
long long random(long long n)
{
return ((double)rand()/RAND_MAX*n+0.5);
}和 long long a=random(n-2)+1; 这种形式,这种形式的运行速度比直接模(n-1)要快,因为计算机进行模运算并不是很快,
另一种是不调用随机函数直接用前十个或者十几个素数作为a的值来进行测试,对于long long级别的测试次数十到二十次就行,次数太多时间将大大增加。然后就是输入输出最好用上read(),write()快速读入输出函数,因为要对较大的数进行测试分解操作,虽然随机算法的时间复杂度较低,但是大的数多了的话也不好。由于该算法的错误率可不计,那么应该是只要涉及到较大数的分解的问题和需要对大的数判断是不是素数的问题用它就行,比如说求1e17这种数的欧拉函数。

这样的话数论大体上还有莫比乌斯和min25筛等一些筛法这两个大坑没填,剩下的就是一些数学性较强的和一些数学定理,方程以及一些衍生算法相关的综合运用了,奥还有很重要的一点是数据结构在数论数学中的应用也需要多费功夫。慢慢来吧。

新的题目就看了几道。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值