出于某种原因处理大数字时,模数运算符并没有给我正确的输出,看看代码
double x = Math.pow(65,17) % 3233;
Run Code Online (Sandbox Code Playgroud)
输出应该是2790
但输出是887.0
我确定它有点傻但我无法绕过它.提前致谢
所以我试图理解模数,我一直在努力,因为我有一个小的学习障碍.我的问题是你如何确定模方程的余数.如果27%16 = 11你怎么得到十一是我不明白?
我们给出了3个数字:a,s和b,每个都在1到1000000之间变化.我们需要找到pow(a,s)%b.显然,我们不能使用简单的pow函数,因为我们无法生成大数,如1000000 1000000.这是问题的解决方案:
sol=1
for(int i=0;i<s;i++)
{
sol = sol * a;
sol = sol % b;
}
print sol
Run Code Online (Sandbox Code Playgroud)
我不明白这个算法.有人可以向我解释一下吗?
PS哪里可以找到更多解决非平凡数学问题的算法,例如这个?干杯!
我试图实现一个密码,我应该只在比特中工作.然而,超过2的mod运算符似乎给出了值2.有谁能告诉我什么出错了?据我所知,模数运算符无法正常工作.
注意:fcsr1并且fcsr2是仅提供80位长数组作为输入的函数.数组值均为0或1.
#include<stdio.h>
int main(){
int i=0,n=0;
int ka[80],kb[80],rs[n];
int *k1,*k2;
printf("Enter the number of keystream bits : ");
scanf("%d",&n);
//Initialize all as 1
for(i=0;i<80;i++){
ka[i]=1;
kb[i]=1;
}
int mb=0,ms=0;
//Updating all 81 times
k1=fcsr1(ka,&mb,81);
k2=fcsr2(kb,&ms,81);
for(i=0;i<n;i=i+2){
k1=fcsr1(k1,&mb,1);
k2=fcsr2(k2,&ms,1);
int x0=k1[23];
int x1=k1[73];
int x2=k2[5];
int x3=k2[9];
int x4=k2[29];
int x5=k1[51];
//printf("%d %d %d %d %d %dNext",x0,x1,x2,x3,x4,x5);
rs[i]=((x0*x1*x2*x4*x5+x0*x1*x2*x5+x0*x1*x2+x0*x1*x3*x5+x0*x1*x4*x5+x0*x1*x4+x0*x1*x5+x0*x1+x0*x2*x3*x4*x5+x0*x2*x3*x5+x0*x2*x3+x0*x2*x4*x5+x0*x2*x4+x0*x2+x0*x3*x4*x5+x0*x3*x4+x0*x3*x5+x0*x3+x0*x4*x5+x0*x4+x1*x2*x3*x5+x1*x2*x3+x1*x2*x4*x5+x1*x2*x4+x1*x2*x5+x1*x3*x4*x5+x1*x3*x4+x1*x3+x1*x4*x5+x1*x4+x1*x5+x2*x3*x5+x2*x3+x2*x5+x2+x3*x5+x4*x5+x5)%2);
k2=fcsr2(k2,&ms,1);
x0=k1[23];
x1=k1[73];
x2=k2[6];
x3=k2[10];
x4=k2[30];
x5=k1[68];
rs[i+1]=((x0*x1*x2*x4*x5+x0*x1*x2*x5+x0*x1*x2+x0*x1*x3*x5+x0*x1*x4*x5+x0*x1*x4+x0*x1*x5+x0*x1+x0*x2*x3*x4*x5+x0*x2*x3*x5+x0*x2*x3+x0*x2*x4*x5+x0*x2*x4+x0*x2+x0*x3*x4*x5+x0*x3*x4+x0*x3*x5+x0*x3+x0*x4*x5+x0*x4+x1*x2*x3*x5+x1*x2*x3+x1*x2*x4*x5+x1*x2*x4+x1*x2*x5+x1*x3*x4*x5+x1*x3*x4+x1*x3+x1*x4*x5+x1*x4+x1*x5+x2*x3*x5+x2*x3+x2*x5+x2+x3*x5+x4*x5+x5)%2);
//printf("%d %d %d %d %d %dEnd",x0,x1,x2,x3,x4,x5);
printf("%d %d ",rs[i],rs[i+1]);
} …Run Code Online (Sandbox Code Playgroud) 在C++命令中是真的吗?
n&1
更快,使用更少的内存
n%2?
(其中n是int类型)
更全局,有没有办法比使用%运算符更快地找到模2的整数残差?提前致谢.
模运算a%b返回余数,a/b但对于负数,它不会这样做.
#include <stdio.h>
int main(void) {
int n=-4;
printf("%d\n",n%3);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它应返回2为3*( - 2)= - 6小于-4且倍数为3但输出为-1.为什么它(-a) mod b一样对待-(a mod b)
如果模数(%)与正数的"余数(r)"相同,那么为什么"0.86%1"结果为"0.86"而不是"0",因为"0.86/1 = 0.86",余数为0.
我已经看到了其他问题,但没有一个问题解决了1个条件下的模型.我能够理解这一点的唯一方法是认为0.86小于1,因此不能除以1,因此返回0.86作为余数.
我对如何获得以下结果感到困惑.如果mod应该返回"余数".以下是lua翻译结果.
> 278 % 1
0
> 278 % 2
0
> 278 % 3
2
> 278 % 4
2
> 278 % 5
3
> 278 % 6
2
> 278 % 7
5
> 278 % 8
6
> 278 % 9
8
> 278 % 20
18
> math.fmod(278,20)
18
Run Code Online (Sandbox Code Playgroud) 鉴于const auto foo = 13.42我想得到数字小数部分,所以.42
我倾向于使用fmod像:fmod(foo, 1.0)
但我也可以做foo / static_cast<int>(foo) - 1.0或者或许其他一些神秘的方法.
我不会简单地使用动机fmod吗?
例如:
a = 10 ^ 12, b = 93 ^ 7
result = b % a
Run Code Online (Sandbox Code Playgroud)
那么,以大O表示形式的'%'运算符的时间复杂度是多少,以及如何计算?
modulo ×10
math ×4
c++ ×3
c ×2
java ×2
algorithm ×1
bitwise-and ×1
computation ×1
decimal ×1
double ×1
fmodf ×1
fractions ×1
javascript ×1
largenumber ×1
lua ×1
performance ×1
pow ×1