求乘法逆元java代码 求解乘法逆元
java编程求某个数的相反数,倒数,绝对值
//倒数
成都创新互联一直通过网站建设和网站营销帮助企业获得更多客户资源。 以"深度挖掘,量身打造,注重实效"的一站式服务,以成都网站建设、网站设计、移动互联产品、营销型网站服务为核心业务。10年网站制作的经验,使用新网站建设技术,全新开发出的标准网站,不但价格便宜而且实用、灵活,特别适合中小公司网站制作。网站管理系统简单易用,维护方便,您可以完全操作网站资料,是中小公司快速网站建设的选择。
double y=(double)1/123;//1除以任何数 就是他本身的倒数 这里把1/123强转为double类型
System.out.println("y的倒数为"+y);
int x =123;//x可以为任意数0-x就是x的相反数
System.out.println((0-x));
//绝对值
int a =-15;
int b=Math.abs(a);
System.out.println(b);
java编写计算器实现退格,倒数,小数点,正负号功能代码
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class General extends JFrame implements ActionListener
{
String args[]={"退格","总清","清零","/","1","2","3","+","4","5","6","-","7","8","9","*","0","+/-",".","="};
JButton jb[]=new JButton[20];
JPanel p1=new JPanel();
JTextField jtf=new JTextField(15);
double num1,num2,jieguo;
char c,ch;
public General()
{
Container ct=getContentPane();
jtf.addKeyListener(new KA());
jtf.setHorizontalAlignment(JTextField.RIGHT);
ct.add(jtf,"North");
p1.setLayout(new GridLayout(5,4));
for(int i=0;i20;i++)
{
jb[i]=new JButton(args[i]);
jb[i].addActionListener(this);
p1.add(jb[i]);
}
ct.add(p1);
pack();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String args[])
{
new General();
}
public void actionPerformed(ActionEvent e)// 监听按键
{
String str=e.getActionCommand().trim();
if("0123456789.".indexOf(str)!=-1)
{
if(jtf.getText().equals("0"))jtf.setText(null);
jtf.setText(jtf.getText()+str);
return;
}
if("+-*/".indexOf(str)!=-1)
{
num1=Double.parseDouble(jtf.getText());
c=str.charAt(0);
jtf.setText(null);
return;
}
else if(str.equals("="))
{
num2=Double.parseDouble(jtf.getText());
switch(c)
{
case '+': jieguo=num1+num2; break;
case '-': jieguo=num1-num2; break;
case '*': jieguo=num1*num2; break;
case '/': jieguo=num1/num2; break;
}
jtf.setText(Double.toString(jieguo));
}
else if(str.equals("+/-"))
{
if(jtf.getText().isEmpty()==false)
{
Double lnum=-(Double.parseDouble(jtf.getText()));
jtf.setText(Double.toString(lnum));
}
else
{
jtf.setText("-");
}
}
else if(str.equals("清空"))
{
jtf.setText(null);
}
else if(str.equals("清零"))
{
jtf.setText("0");
}
else if(str.equals("退格"))
{
jtf.setText(jtf.getText().substring(0,jtf.getText().length()-1));
}
}
class KA extends KeyAdapter // 监听键盘
{
public void keyPressed(KeyEvent e)
{
char ch=e.getKeyChar();
if("+-*/".indexOf(ch)!=-1)
{
num1=Double.parseDouble(jtf.getText());
c=ch;
}
if(ch=='='|ch==e.VK_ENTER)
{
num2=Double.parseDouble(jtf.getText());
switch(c)
{
case '+': jieguo=num1+num2; break;
case '-': jieguo=num1-num2; break;
case '*': jieguo=num1*num2; break;
case '/': jieguo=num1/num2; break;
}
}
}
public void keyReleased(KeyEvent e)
{
char ch=e.getKeyChar();
if("+-*/".indexOf(ch)!=-1)
{
jtf.setText(null);
}
if(ch=='='|e.getKeyCode()==e.VK_ENTER)
{
jtf.setText(Double.toString(jieguo));
}
}
}
}
AES算法中的S盒,求GF(2^8)上的乘法逆元怎么求啊?
一般根据定义 A^-1==A^254,所以求A的254次方就可以了,254次又等于
128+64+32+16+8+4+2=2*( 2*(2*(2*(2*(2*(2+1)+1)+1)+1)+1)+1),所以只需要做7次平方和7次乘A。
当然在AES运算中,需要求出全部256个数的倒数,都用这种算法还是比较费的,可以用以下的方法
首先求3的全部255次幂,并做成两个查找表,即正向通过幂次查结果,和反向通过结果查幂次,这个过程可以,因为乘3是最简单的一个乘法操作 ,并且3的255次幂可以遍历整个GF(2,8)空间。
因为3^255=1,所以 当m+n=255时,3^m 和3^n互为倒数,即3^m的逆元就是3^n, n=255-m,那么求一个数A的逆元,可以先通过上面生成的反查表查出A对于3的幂次m,再用255-m=n,在正向表中查出3的n次幂,那个数就是A的逆元,这样求一个逆元就只是两次查表操作了。
乘法逆元算法
本原元是指有限域乘法群的生成元,它的阶数是q-1,q是有限域中元素个数。本原元的作用有很多,你问的是在乘法和乘法逆元上计算的用处。下面假设w是一个本原元
首先,有限域F中的任何非零元素a都可以表达成w^m的形式,这是因为有限域的乘法群是一个循环群,而本原元是这个循环群的生成元。这样在计算有限域元素之间乘法的时候,只要将指数相加。具体的说,a=w^m,b=w^n,ab=w^(m+n).
其次,任何一个非零元素a,有上面知道a=w^m,那么a的逆a^(-1)=w^(-m)
本原元还有其他的用处,如分圆多项式,本原多项式,域的扩张等。不过这不是几句话能说清楚的了。
我是学代数的,有问题我们可以再交流。
本文名称:求乘法逆元java代码 求解乘法逆元
本文网址:http://pwwzsj.com/article/ddojpsh.html