📄 quickmod.java
字号:
import java.math.*;
public class QuickMod//快速取模类
{
/*
*相等两点相加的"入"
*/
public BigInteger getNamna1(BigInteger x1,BigInteger y1,BigInteger a,BigInteger p)
//public BigInteger getNamna1(BigInteger p)
{
BigInteger fz=BigInteger.valueOf(3).multiply(x1.multiply(x1)).add(a);
BigInteger fm=BigInteger.valueOf(2).multiply(y1);
//BigInteger fz=BigInteger.valueOf(123);//测试数据
//BigInteger fm=BigInteger.valueOf(796);//测试数据
BigInteger m1=fz.mod(p);
BigInteger m2=fm.modInverse(p);
BigInteger m3=m1.multiply(m2).mod(p);
return m3;
}
/*
*不同两点相加的"入"
*/
public BigInteger getNamna2(BigInteger x1,BigInteger y1,BigInteger x2,BigInteger y2,BigInteger p)
{
BigInteger fz=y2.subtract(y1);//x1,y1是P的点,x2,y2是Q的点
BigInteger fm=x2.subtract(x1);
BigInteger m1=fz.mod(p);
BigInteger m2=fm.modInverse(p);
BigInteger m3=m1.multiply(m2).mod(p);
return m3;
}
/*
*大整数下快速取模方法
*/
public BigInteger getMod(BigInteger fz,BigInteger fm,BigInteger modulus)
{
BigInteger m1=fz.mod(modulus);
BigInteger m2=fm.modInverse(modulus);
BigInteger m3=m1.multiply(m2).mod(modulus);
return m3;
}
/*
*测试 QuickMod
*/
public static void main(String args[])
{
QuickMod mod=new QuickMod();
System.out.println(mod.getNamna1(BigInteger.valueOf(113),
BigInteger.valueOf(107),BigInteger.valueOf(117),BigInteger.valueOf(301)));//测试数据
BigInteger b=mod.getNamna2(BigInteger.valueOf(7),BigInteger.valueOf(19),BigInteger.valueOf(13),BigInteger.valueOf(12),BigInteger.valueOf(23));
System.out.println(b);
System.out.println(mod.getMod(BigInteger.valueOf(11),BigInteger.valueOf(13),BigInteger.valueOf(23)));
System.out.println(mod.getMod(BigInteger.valueOf(123),BigInteger.valueOf(796),BigInteger.valueOf(1013)));
System.out.println(mod.getMod(BigInteger.valueOf(456),BigInteger.valueOf(796),BigInteger.valueOf(1013)));
System.out.println(mod.getMod(BigInteger.valueOf(789),BigInteger.valueOf(796),BigInteger.valueOf(1013)));
System.out.println(mod.getMod(BigInteger.valueOf(101),BigInteger.valueOf(796),BigInteger.valueOf(1013)));
System.out.println(mod.getMod(BigInteger.valueOf(12),BigInteger.valueOf(796),BigInteger.valueOf(1013)));
System.out.println(mod.getMod(BigInteger.valueOf(123),BigInteger.valueOf(796),BigInteger.valueOf(1013)));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -