论直接取模与手写取模函数的时间差异

最近在多校题解中经常看到巨巨们手写函数进行取模操作,似乎是比%操作更快。

%操作在计算机中的实现依靠除法,显然不如手写函数的加减法更优秀。

在进行多次加法更新取模的时候,可以写一发。不过当算法复杂度在O(n)以上的时候,这个优化意义不大。

 1 #include <cstdio>
 2
 3 const int maxn = 5e8+11;
 4 const int MOD = 1e9+7;
 5 typedef long long LL;
 6
 7 inline void update(LL &x,LL d)
 8 {
 9     x += d;
10     if(x >= MOD) x -= MOD;
11     if(x < 0) x += MOD;
12 }
13
14 int main()
15 {
16     LL ans = 0;
17     printf("update()\n");
18     for(int i=0;i<maxn;i++)
19     {
20         //ans += i;
21         //ans %= MOD;
22         update(ans,i);
23     }
24     printf("%I64d\n",ans);
25 }

看起来优化了很多的样子

cpu是i5-4300u

时间: 2024-11-10 18:31:41

论直接取模与手写取模函数的时间差异的相关文章

快速幂取模和快乘取模

一.快速幂取模概念 快速幂取模,顾名思义,就是快速的求一个幂式的模(余),比如a^b%c,快速的计算出这个式子的值. 在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快.计算范围更大的算法,产生了快速幂取模算法. 二.快速幂取模算法实现 1)很容易能想到,循环b次,每次乘a,最后对c取余就可以了. int ans = 1; for(int i = 1; i<=b; i++) { ans = ans * a; } ans = ans % c; 这个朴素算法的问题是: 1.如果a和b

【转】数学与编程——求余、取模运算及其性质

声明 转自:https://blog.csdn.net/chensilly8888/article/details/42834697 此博文简短有精悍的讲述了在数学与计算机科学中求余与取模运算的区别, 在不同语言下取模的意义以及取模运算的性质 由于我觉得oi编程的话,只需要弄懂取模的性质就行了,因为编程竞赛的时候,是只用一种语言写的,自己平常打代码也就熟悉了那种语言的语法之类的. 取模运算的性质 如果a≡b(mod m),x≡y(mod m),则a+x≡b+y(mod m). 如果a≡b(mod

取模和求余的区别

通常情况下取模运算(mod)和求余(rem)运算被混为一谈,因为在大多数的编程语言里,都用'%'符号表示取模或者求余运算.在这里要提醒大家要十分注意当前环境下'%'运算符的具体意义,因为在有负数存在的情况下,两者的结果是不一样的. 对于整型数a,b来说,取模运算或者求余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余数: r = a - c*b. 求模运算和求余运算在第一步不同: 取模求余运算在取c的值时,向0 方向舍入(fix()函数): 而求余取模运算在计算c的值时,向

[转]取模运算和求余运算的区别

[转]取模运算和求余运算的区别 通常情况下取模运算(mod)和求余(rem)运算被混为一谈,因为在大多数的编程语言里,都用'%'符号表示取模或者求余运算.在这里要提醒大家要十分注意当前环境下'%'运算符的具体意义,因为在有负数存在的情况下,两者的结果是不一样的. 对于整型数a,b来说,取模运算或者求余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余数: r = a - c*b. 通常常用的是正数之间取模或求余.下面的可以先不关心. —————————————————————

mongoDB 高级查询之取模查询$mod

http://hancang2000.i.sohu.com/blog/view/235140698.htm $mod取模运算 查询age取模10等于0的数据 db.student.find( { age: { $mod : [ 10 , 1 ] } } ) 举例如下: C1表的数据如下: > db.c1.find() { "_id" : ObjectId("4fb4af85afa87dc1bed94330"), "age" : 7, &qu

B-Icebound and Sequence(等比数列求和取模)

题目传送门:B-Icebound and Sequence(19年河北省赛) 题目大意: 等比数列求和,结果取模 分析: 因为取模操作,直接运用等比数列求和公式无法做出,所以需要用到公式 求等比为k的等比数列之和S[n]..当n为偶数..S[n] = S[n/2] + pow(k,n/2) * S[n/2] n为奇数...S[n] = S[n/2] + pow(k,n/2) * S[n/2] + pow(k,n)等比数列第n个数的值 代码: #include<bits/stdc++.h> us

07 训练Tensorflow识别手写数字

打开Python Shell,输入以下代码: 1 import tensorflow as tf 2 from tensorflow.examples.tutorials.mnist import input_data 3 4 # 获取数据(如果存在就读取,不存在就下载完再读取) 5 mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) 6 7 # 输入 8 x = tf.placeholder("flo

.netER的未来路,关于基础是否重要和应该自己手写代码吗?

http://www.cnblogs.com/onepiece_wang/p/5558341.html#!comments 引用"基础知识的学习,一开始可能是背书,但是在后续若干年的工作过程中,在写代码时有没有想过为什么代码要写成这样子." 谁没有去想过呢?我深究过,但后来放弃了,原因很简单,因为我深究后发现,1+1等于2 苹果就是叫苹果.我去思考1+1为什么等于2 苹果为什么叫苹果.研究透后才发现只是多此一举,很浪费时间也没有实质性的作用.因为他就叫那个苹果名字,1+1就是等于2,我

codevs1281 矩阵乘法 快速幂 !!!手写乘法取模!!! 练习struct的构造函数和成员函数

对于这道题目以及我的快速幂以及我的一节半晚自习我表示无力吐槽,, 首先矩阵乘法和快速幂没必要太多说吧,,嗯没必要,,我相信没必要,,实在做不出来写两个矩阵手推一下也就能理解矩阵的顺序了,要格外注意一些细节,比如快速幂时ans矩阵的初始化方式,快速幂的次数,矩阵乘法过程中对临时矩阵的清零,最后输出结果时的初始矩阵...矩阵快速幂好理解但是细节还是有点小坑的.. 下面就是满满的槽点,,高能慎入!!! 对于这个题目要求矩阵过程中对m取模,结果对g取模,我表示难以接受,,上来没看清题直接wa19个点,另