C#语言与OnClientItemChecked
的{{1}}有何不同?
如果我们使用相反的数字,例如每个数字之间是否存在差异,例如
BigInteger.Remainder(a, b)
和
BigInteger.ModPow(a, 1, b)
答案 0 :(得分:3)
例如,差异与int a = 5;
和int a = Math.Pow(5, 1);
之间的差异相同。
根据文件,
BigInteger.ModPow
对提升到另一个数字幂的数字执行模数除法。
BigInteger.Remainder (a,b)
对两个BigInteger值执行整数除法并返回余数。
换句话说,ModPow
(a ^ b) % c
( ^
是pow )和Remainder
a % c
。
如果b
等于1,则它们将产生相同的值。但是,使用ModPow
需要什么?在进行一些额外的计算时,降低性能(参见“性能比较”)和可读性是没有意义的。在这种情况下使用Remainder
。
如果您需要BigInteger功率的模数,请使用ModPow
。
使用以下代码对这些操作进行基准测试:
List<BigInteger> results = new List<BigInteger>();
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 1000000; i++)
{
results.Add(BigInteger.ModPow(new BigInteger(21), 1, new BigInteger(-5)));
}
sw.Stop();
Console.WriteLine($"ModPow took {sw.ElapsedMilliseconds} ms");
sw.Restart();
for (int i = 0; i < 1000000; i++)
{
results.Add(BigInteger.Remainder(new BigInteger(21), new BigInteger(-5)));
}
sw.Stop();
Console.WriteLine($"Modulus took {sw.ElapsedMilliseconds} ms");
输出如下:
ModPow took 277 ms
Modulus took 91 ms
表明只有在实际需要N次方整数模数时才应使用ModPow
。
答案 1 :(得分:1)
除了ModPow浪费更多的电力之外,理论上不存在,也几乎没有。
https://dotnetfiddle.net/cZ2LZh
using System;
using System.Numerics;
public class Program
{
public static void Main()
{
var a = System.Numerics.BigInteger.ModPow (new System.Numerics.BigInteger(21) ,1,new System.Numerics.BigInteger(-5) ) ;
var b = BigInteger.Remainder(new BigInteger(21),new BigInteger(-5));
Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine("Hello World");
}
}
==&GT;
1
1
你好世界