本文整理汇总了C#中UInt128.is_odd方法的典型用法代码示例。如果您正苦于以下问题:C# UInt128.is_odd方法的具体用法?C# UInt128.is_odd怎么用?C# UInt128.is_odd使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类UInt128
的用法示例。
在下文中一共展示了UInt128.is_odd方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: _powmodp_r
/*--------------------------------------------------------------------------*/
/* r = a^b mod P (reduce) */
public static UInt128 _powmodp_r(UInt128 a, UInt128 b)
{
UInt128 half_b = new UInt128(b);
if (b._high == 0 && b._low == 1)
{
return new UInt128(a);
}
half_b.rshift();
UInt128 t = _powmodp_r(a, half_b);
t = _mulmodp(t, t);
if (b.is_odd())
{
t = _mulmodp(t, a);
}
return t;
}
示例2: _mulmodp
/*--------------------------------------------------------------------------*/
/* r = a*b mod P */
public static UInt128 _mulmodp(UInt128 _a, UInt128 _b)
{
UInt128 r = new UInt128(0, 0);
UInt128 a = new UInt128(_a);
UInt128 b = new UInt128(_b);
while (!b.is_zero())
{
if (b.is_odd())
{
UInt128 t = sub(P, a);
if (compare(r, t) >= 0)
{
r = sub(r, t);
}
else
{
r = add(r, a);
}
}
UInt128 double_a = new UInt128(a);
double_a.lshift();
UInt128 P_a = sub(P, a);
if (compare(a, P_a) >= 0)
{
a = add(double_a, INVERT_P);
}
else
{
a = double_a;
}
b.rshift();
}
return r;
}