Advertisement
anonEMuss

BigNumTester

Jul 7th, 2018
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.09 KB | None | 0 0
  1. package bignumTester;
  2.  
  3. import java.math.BigInteger;
  4. import java.util.ArrayList;
  5. import javafx.application.Application;
  6. import javafx.event.ActionEvent;
  7. import javafx.event.EventHandler;
  8. import javafx.geometry.Pos;
  9. import javafx.scene.Scene;
  10. import javafx.scene.control.Button;
  11. import javafx.scene.control.TextArea;
  12. import javafx.scene.layout.ColumnConstraints;
  13. import javafx.scene.layout.GridPane;
  14. import javafx.scene.layout.RowConstraints;
  15. import javafx.scene.text.Text;
  16. import javafx.stage.Stage;
  17.  
  18. public class BigNumTester extends Application {
  19.  
  20. private BigInteger rsaVal;
  21. private BigInteger dVal;
  22. private BigInteger ddVal;
  23. private BigInteger eVal;
  24. private BigInteger xVal;
  25. private BigInteger bigNVal;
  26.  
  27. private static final int WIDTH = 1024;
  28. private static final int HEIGHT = 768;
  29. private static final int NUMCOLS = 5;
  30. private static final int NUMROWS = 5;
  31. private static final int COL1_PERCENT_WIDTH = 10;
  32. private static final int OTHERCOLS_PERCENT_WIDTH = (100 - COL1_PERCENT_WIDTH);
  33. private static final int PADDING= 10;
  34.  
  35.  
  36. @Override
  37. public void start(Stage primaryStage) {
  38. GridPane root = new GridPane();
  39. setupGrid(root);
  40. addComponents(root);
  41.  
  42. Scene scene = new Scene(root, WIDTH, HEIGHT);
  43. scene.getStylesheets().add
  44. (BigNumTester.class.getResource("bigNumTester.css").toExternalForm());
  45.  
  46. primaryStage.setTitle("BigNumTester");
  47. primaryStage.setScene(scene);
  48. primaryStage.show();
  49. }
  50.  
  51. public static void main(String[] args) {
  52. launch(args);
  53. }
  54.  
  55. private void setupGrid(GridPane root){
  56. ArrayList<ColumnConstraints> ccArray = new ArrayList<>();
  57. ColumnConstraints c1 = new ColumnConstraints();
  58. c1.setPercentWidth(COL1_PERCENT_WIDTH);
  59. ccArray.add(c1);
  60.  
  61. for(int i = 1; i < NUMCOLS; i++){
  62. ColumnConstraints temp = new ColumnConstraints();
  63. temp.setPercentWidth(OTHERCOLS_PERCENT_WIDTH/(NUMCOLS - 1));
  64. ccArray.add(temp);
  65. }
  66.  
  67. ArrayList<RowConstraints> rcArray = new ArrayList<>();
  68. for(int j = 0; j < NUMROWS; j++){
  69. RowConstraints temp = new RowConstraints();
  70. temp.setPercentHeight(100/NUMROWS);
  71. rcArray.add(temp);
  72. }
  73. root.getColumnConstraints().addAll(ccArray);
  74. root.getRowConstraints().addAll(rcArray);
  75. }
  76. private void addComponents(GridPane root){
  77. Text rsaLbl = new Text("RSA2048:");
  78. TextArea rsaIn = new TextArea();
  79. rsaIn.setPrefColumnCount(WIDTH * OTHERCOLS_PERCENT_WIDTH / 100);
  80. rsaIn.setPrefRowCount(100/NUMROWS * 1 * HEIGHT);
  81. rsaIn.setWrapText(true);
  82.  
  83. Text dLbl = new Text("d: ");
  84. TextArea dResult = new TextArea("");
  85. dResult.setPrefColumnCount(WIDTH * OTHERCOLS_PERCENT_WIDTH / 100);
  86. dResult.setPrefRowCount(100/NUMROWS * 1 * HEIGHT);
  87. dResult.setWrapText(true);
  88.  
  89. Text eLbl = new Text("e: ");
  90. TextArea eResult = new TextArea("");
  91. eResult.setPrefColumnCount(WIDTH * OTHERCOLS_PERCENT_WIDTH / 100);
  92. eResult.setPrefRowCount(100/NUMROWS * 1 * HEIGHT);
  93. eResult.setWrapText(true);
  94.  
  95. Text bigNLbl = new Text("N: ");
  96. TextArea bigNResult = new TextArea("");
  97. bigNResult.setPrefColumnCount(WIDTH * OTHERCOLS_PERCENT_WIDTH / 100);
  98. bigNResult.setPrefRowCount(100/NUMROWS * 1 * HEIGHT);
  99. bigNResult.setWrapText(true);
  100.  
  101. Button runBtn = new Button("Go!");
  102. runBtn.setAlignment(Pos.BOTTOM_RIGHT);
  103. runBtn.setOnAction(new EventHandler<ActionEvent>(){
  104. @Override
  105. public void handle(ActionEvent e){
  106. rsaVal = new BigInteger(rsaIn.getText());
  107. dVal = Sqrt(rsaVal);
  108. dResult.setText(dVal.toString());
  109. ddVal = dVal.multiply(dVal);
  110. eVal = rsaVal.subtract(ddVal);
  111. eResult.setText(eVal.toString());
  112. xVal = dVal.subtract(BigInteger.ONE);
  113. bigNVal = rsaVal.subtract(BigInteger.ONE).divide(new BigInteger("2")).subtract(xVal);
  114. bigNResult.setText(bigNVal.toString());
  115. }
  116. });
  117.  
  118. root.add(rsaLbl,0,0);
  119. root.add(rsaIn,1,0,4,1);
  120. root.add(dLbl,0,1);
  121. root.add(dResult,1,1,4,1);
  122. root.add(eLbl,0,2);
  123. root.add(eResult,1,2,4,1);
  124. root.add(bigNLbl,0,3);
  125. root.add(bigNResult,1,3,4,1);
  126. root.add(runBtn,4,4,2,1);
  127. }
  128. //https://stackoverflow.com/questions/4407839/how-can-i-find-the-square-root-of-a-java-biginteger
  129. public static BigInteger Sqrt(BigInteger number){
  130. BigInteger high = BigInteger.ZERO.setBit(number.bitLength()/2);
  131. BigInteger low = high;
  132. if (number == BigInteger.ZERO){
  133. return BigInteger.ZERO;
  134. }
  135. for(;;){
  136. BigInteger n = high.add(number.divide(low)).shiftRight(1);
  137. //This conditional has been modified; it may have to be reevaluated if there are problems.
  138. //As it was, it was seeking the closest of -either- the higher or lower perfect square:
  139. //if(n.equals(high) || n.equals(low)){
  140. if(n.equals(low) || n.equals(BigInteger.ZERO)){
  141. return n;
  142. }
  143. low = high;
  144. high = n;
  145. }
  146. }
  147. }
  148.  
  149.  
  150. css file (name it "bigNumTester.css", place in the same file as the above file (which should be named "BigNumTester.java"):
  151.  
  152. .root {
  153. -fx-background-color: gainsboro;
  154. -fx-font-family: "Century Gothic";
  155. -fx-font-size: 14pt;
  156. }
  157. .text {
  158. -fx-font-size: 16pt;
  159. -fx-font-family: "Century Gothic";
  160. }
  161. .text-area {
  162. -fx-font-size: 10pt;
  163. -fx-font-family: "Century Gothic";
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement