移位实现模七和模十三的操作
来源:互联网 发布:mac修改器win10 编辑:程序博客网 时间:2024/06/09 19:33
移位实现模七和模十三的操作
模七和模十三其实都可以通过移位操作来实现。
先说模七。对任意数N,写成如下形式:
N = 8*x + y。其中x = N/8 = N>>3,y = N%8 = N & 0x7。
此时我们有N%7=(8*x+y)%7 = x+y。
可以对x+y进行同样的处理直到(x+y)%7<8,此时结果要么为0,要么为(x+y)%7。
对于模十三,方法是一样一样的。
N = 16*x + y。其中x = N/16 = N>>4,y = N%16 = N & 0xf。
此时有N%13 = (16*x+y)%13 = 3*x+y。
继续对(3*x+y)进行同样的处理,直到(3*x+y)%13小于16,此时结果要么为(3*x+y)%13,要么为(3*x+y)%13-13。
具体的代码实现如下:
#include<stdio.h>
#include<stdlib.h>
//N=8x+y,x=N/8,y=N%8,N%7=(x+y)%7,do the same until (x+y)%7 is less than 8.
int mod7(int data)
{
int re = data & 0x7;
int quo = data >> 3;
int s = re + quo;
while(s > 7)
{
re = s & 0x7;
quo = s >> 3;
s = re + quo;
}
if(s < 7)
return s;
else
return 0;//s=7.
}
//N=16x+y,x=N/16,y=N%16,N%13=(3x+y)%13,do the same until (3x+y)%13 is less than 16.
int mod13(int data)
{
int re = data & 0xf;
int quo = data >> 4;
int s = 3*quo + re;
while(s > 15)
{
re = s & 0xf;
quo = s >> 4;
s = 3*quo + re;
}
if(s < 13)
return s;
else
return s-13;
}
int main()
{
for(int i=0;i<1000;i++)
{
int w = rand();
if(w%13 != mod13(w) || w%7 != mod7(w))
{
printf("w = %d ",w);
printf("w mod 7 and w mod 13 res are : %d %d %d %d \n",mod7(w),mod13(w),w%7,w%13);
}
else
{
printf("You got the right answer!\n");
}
}
return 0;
}
参考csdn:http://blog.csdn.net/tjltail/article/details/1482316
#算法 #编程学习
模七和模十三其实都可以通过移位操作来实现。
先说模七。对任意数N,写成如下形式:
N = 8*x + y。其中x = N/8 = N>>3,y = N%8 = N & 0x7。
此时我们有N%7=(8*x+y)%7 = x+y。
可以对x+y进行同样的处理直到(x+y)%7<8,此时结果要么为0,要么为(x+y)%7。
对于模十三,方法是一样一样的。
N = 16*x + y。其中x = N/16 = N>>4,y = N%16 = N & 0xf。
此时有N%13 = (16*x+y)%13 = 3*x+y。
继续对(3*x+y)进行同样的处理,直到(3*x+y)%13小于16,此时结果要么为(3*x+y)%13,要么为(3*x+y)%13-13。
具体的代码实现如下:
#include<stdio.h>
#include<stdlib.h>
//N=8x+y,x=N/8,y=N%8,N%7=(x+y)%7,do the same until (x+y)%7 is less than 8.
int mod7(int data)
{
int re = data & 0x7;
int quo = data >> 3;
int s = re + quo;
while(s > 7)
{
re = s & 0x7;
quo = s >> 3;
s = re + quo;
}
if(s < 7)
return s;
else
return 0;//s=7.
}
//N=16x+y,x=N/16,y=N%16,N%13=(3x+y)%13,do the same until (3x+y)%13 is less than 16.
int mod13(int data)
{
int re = data & 0xf;
int quo = data >> 4;
int s = 3*quo + re;
while(s > 15)
{
re = s & 0xf;
quo = s >> 4;
s = 3*quo + re;
}
if(s < 13)
return s;
else
return s-13;
}
int main()
{
for(int i=0;i<1000;i++)
{
int w = rand();
if(w%13 != mod13(w) || w%7 != mod7(w))
{
printf("w = %d ",w);
printf("w mod 7 and w mod 13 res are : %d %d %d %d \n",mod7(w),mod13(w),w%7,w%13);
}
else
{
printf("You got the right answer!\n");
}
}
return 0;
}
参考csdn:http://blog.csdn.net/tjltail/article/details/1482316
#算法 #编程学习
- 移位实现模七和模十三的操作
- 编程实现字符串的循环移位操作
- 移位操作和乘法的比较
- 使用移位操作符实现奇偶数的判断,C和Java版1
- Java的移位操作
- 移位操作的妙用
- Java的移位操作
- 移位操作的优先级
- 集合的移位操作
- Java的移位操作
- 算术移位和逻辑移位实现分析
- 算术移位和逻辑移位实现分析
- 用移位实现除法操作
- 利用异或移位操作实现的加法
- 用java实现数组的循环逐步移位操作
- 用java实现数组的循环逐步移位操作
- 用java实现数组的循环逐步移位操作
- 【大数据】位图算法移位操作的实现
- camera otp
- coreseek 遇到的问题
- JVM内存区域划分
- 围棋气口诀
- 图片PDF文件转Word
- 移位实现模七和模十三的操作
- 关于hadoop中filesystem closed的error的想法
- 计算机图形学概况
- Android LayoutInflater详解
- js-知识1
- 一个前辈写的网络协议学习方法
- Spring的多数据源配置(Spring+iBATIS + Oracle环境下)
- 字符串转换成整数 (bug版)
- 服务器集群架构的设计与选择