fork(14) download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. import java.math.BigInteger;
  8. import java.nio.ByteBuffer;
  9.  
  10. /* Name of the class has to be "Main" only if the class is public. */
  11. class Ideone
  12. {
  13. private static byte[] multiply(final byte[] a, final byte[] b, final BigInteger mod, int maxLen) {
  14. BigInteger M1 = new BigInteger(1, a);
  15. BigInteger M2 = new BigInteger(1, b);
  16.  
  17. BigInteger out = M1.multiply(M2).mod(mod);
  18.  
  19. byte[] res;
  20.  
  21. if(out.toByteArray().length > maxLen) {
  22. // TODO: cheat is here. Sometimes invalid leading zero byte is included into output
  23. // http://stackoverflow.com/questions/40657861/leading-zero-in-biginteger-multiplication
  24. res = new byte[maxLen];
  25. System.arraycopy(out.toByteArray(), out.toByteArray().length - maxLen, res, 0, maxLen);
  26. System.out.println("Multiply: "+ Arrays.toString(out.toByteArray()) + "\n");
  27. } else {
  28. res = out.toByteArray();
  29. }
  30.  
  31. return res;
  32. }
  33.  
  34. public static void testMult() {
  35. byte[] m1 = { 43, 108, 108, 97, 41, 61, 51, -99, -105, -118, 25, 32, 112, -49, 71, -81, -64, 66, -14, -52, -90, -115, 9, 123, 103, 103, -106, -44, -59, -73, -22, 16, -16, -15, 50, 17, -48, -56, 11, 29, 40, 54, -30, 40, 77, -103, 5, -80, 40, 0, 59, -29, 20, -126, 35, -5, -76, -28, -26, 68, -120, -16, 9, -98, 95, 55, 113, -61, 13, -10, 126, 36, 104, -30, -84, -45, -39, 124, 89, 1, 67, -112, 118, 33, -94, -66, 47, -114, 34, 123, 127, 44, -28, 24, 112, -68, -13, 96, -15, -108, 108, -58, -95, -87, -71, -18, 51, -34, 28, 121, 85, 71, 30, -55, -81, 104, 36, -43, -91, 78, 11, -14, 62, -36, 107, -77, 103, -121, 90, -76, 63, 110, -124, 39, 22, 114, -7, -82, -73, -38, 10, -118, -47, 0, -97, -41, -58, 92, -43, -18, 102, 50, -101, -81, 84, -83, 125, -34, -89, -63, 11, -81, 109, 11, -18, -127, 20, -95, 123, -54, 87, -33, 23, 12, -27, -54, 19, 92, 81, -111, -16, -11, 96, 13, -60, 53, -115, 118, 54, 92, 25, 14, 116, -4, 62, -72, -97, -37, -68, -36, 99, -9, -59, -68, -83, -115, -100, -64, 0, 45, 61, 20, -101, -4, 73, 87, 64, 126, 88, -3, 48, -113, 8, 4, -13, 115, -100, -55, 70, -115, -8, -110, -88, -93, -98, -44, 34, 108, 23, -72, 65, -51, -2, 67, -111, -89, 89, -126, -61, 7, 29, -106, -9, 105, -4, -59 };
  36. byte[] m2 = { 102, -127, -18, -125, -22, 86, 87, -103, 6, 6, -42, 21, 57, 21, 38, -100, 24, 30, 7, -33, 50, -125, 120, -12, 99, 20, 127, 77, -21, 114, 26, -97, -81, 106, -86, -73, -70, 16, 98, -122, -114, -125, 127, -45, 96, 30, 89, 26, 119, -13, 19, 79, 47, 95, 37, 43, 59, 21, -26, -22, -8, 21, -127, 71, 45, -73, -1, -25, 83, -97, 92, 60, 83, -21, 93, -54, 83, -75, -34, -50, -81, 47, -46, -84, -20, 3, -7, 70, 66, 77, -55, -101, 95, -65, 30, -78, 28, 41, -63, 59, 2, -98, -118, 125, 122, -4, -62, -123, -82, -79, -30, 105, 40, -6, -21, -33, -95, 63, 69, -56, 122, -87, -118, 120, 44, 39, -125, -36, 70, 21, 11, -10, 48, -69, -108, -119, -1, -41, 123, -33, -109, -37, -69, 39, -104, 10, 10, 12, 14, 42, -38, -91, -2, 69, -128, -36, -89, -6, 41, 64, -115, 87, 91, -118, 80, 112, -1, -24, 49, 89, 88, 40, -58, -50, 57, 97, 41, -113, 21, 89, -89, 92, -42, 72, 92, -73, 2, 118, 71, 48, -92, -19, 32, 114, 101, -120, 46, -99, -35, 67, 36, 85, -116, 93, -95, -78, -10, -98, -99, -18, 94, -49, 87, 30, 24, -88, -86, -65, 96, 46, -71, 35, 97, 114, 6, 8, 22, -52, -112, -67, -107, -48, -51, 27, 81, -109, -99, -111, 47, -120, 27, 107, 104, 17, 86, -99, -50, -54, 23, -111, 124, 39, -18, 24, -89, -63};
  37.  
  38. byte[] m3 = { 16, -22, 29, -68, 35, -30, -126, 122, -95, -30, -121, -55, -90, -27, -122, -49, 127, 50, 47, -78, 96, -35, 63, 28, -113, 43, 73, 106, -19, -89, 122, 122, -67, 55, -60, 88, 46, -123, -95, -65, -12, 37, -68, 31, 10, -61, 97, -128, 30, -28, -7, 46, 49, -114, -26, 26, -34, -19, 76, 83, 111, 114, -13, 110, -33, 66, -123, -61, -69, 18, -115, -51, 12, 79, -54, -106, -47, -111, 14, -28, 98, 95, 1, -32, 2, -59, -44, -58, 7, 29, -18, -80, 7, 66, 61, 90, 40, 52, -121, 29, -43, 91, 35, 29, -59, 56, 73, -2, -26, -34, 15, 86, -108, -128, -81, -47, -101, -29, -45, 64, -126, 63, 10, 46, 3, 120, 45, -117, -104, 84, -73, 18, 122, -12, -121, 27, 8, -45, -53, -103, -7, -96, -56, 28, 97, 101, 127, -14, 48, -75, -100, -59, 99, -60, -105, 72, -73, -45, -120, -58, -9, 68, -66, 4, -32, 36, 87, -8, 10, -32, -28, -27, 21, 37, -42, -42, 109, 33, -24, -26, -31, 127, -68, -122, -49, 1, 32, 124, 126, -2, 79, -6, 8, 21, -50, -1, 105, 70, -69, 117, 79, 41, -83, -78, 61, -8, 3, -36, 41, -122, -35, 82, -19, 58, 0, 25, -44, 23, -49, -113, 97, -99, -50, 124, -124, 62, 24, 49, -125, -59, 45, -57, 106, -3, -91, 89, 12, 13, 12, 22, -102, 100, -5, -54, 76, 2, 116, 22, 10, -118, -30, -29, -22, 112, 90, -103};
  39. byte[] m4 = { 90, 79, 64, -21, 13, -5, 3, 29, 45, 123, 48, -12, -67, -5, -64, -34, -75, -53, -36, 70, -108, -93, 107, -90, -34, -87, 40, -106, 56, -127, -56, 117, 51, 80, -45, 121, 3, 44, -120, -69, -62, -104, -115, -20, -106, 102, 10, 85, -16, 111, 110, 89, 83, 1, -103, 71, -120, 115, 30, -69, 65, -14, 123, -47, 41, -7, -20, -11, 28, 49, 18, 81, -95, -14, -51, 84, 21, -72, -47, -8, 73, -17, 1, -61, 42, -104, 14, 26, -68, -67, 106, 91, -82, -18, -125, 59, 21, -30, 74, 22, -11, -56, -82, 119, -83, 7, -60, -8, -113, -38, -113, -85, -117, -15, 105, 4, 119, -61, 31, -51, -66, 117, -115, 31, -46, 81, 17, 87, -96, 113, 75, 15, -31, 125, 43, -46, 83, 55, 87, 40, 63, 47, -103, -31, 126, -73, -84, 92, -65, 82, -50, 118, -2, 29, -128, -107, -27, -34, 74, -2, 3, 22, 36, 108, 84, 54, -39, 61, 59, 41, 26, 70, 32, 122, 74, 105, 95, -44, -69, -67, -15, 11, -127, -54, -92, -87, -32, -78, -124, -127, 0, 121, -123, -109, -55, 28, 11, 5, 13, -14, 105, -59, 35, -62, 38, -94, -18, 50, 33, 6, -120, 95, 63, 40, -106, 107, -19, 15, 73, 65, 106, 90, -67, -27, 10, -38, -126, 7, -107, -10, 18, 58, 101, -61, 96, -123, -97, -17, -53, -21, -39, 74, -26, 58, -105, 125, 26, 114, -44, 116, 1, 41, -37, -70, 123, -97};
  40.  
  41. BigInteger modulus = new BigInteger(
  42. "16351918650768978043869013339271504618848306664769786637083871417499863492621523650680395902908290692848691697426297583224262914449002372394629805288508460081625786815395630974011238042238105199176933520314793238046209458405056744497573835125168991458506069871082629403535849021448001723362252726371892637961695839791672366699134575105403064855071511479575075090590810224041268094422584578404194047140054082717484362241173803709366976384725499363410565198819506909824058153243708460440060433627618416841389222303324952075845712297535638608064468891922143510227981747143673880908282600492143501254973420544650272588129");
  43.  
  44. System.out.println("Multiply: "+ Arrays.toString(multiply(m1, m2, modulus, 256)));
  45. System.out.println("Multiply: "+ Arrays.toString(multiply(m3, m4, modulus, 256)));
  46. }
  47.  
  48. public static void main (String[] args) throws java.lang.Exception
  49. {
  50. testMult();
  51. }
  52. }
Success #stdin #stdout 0.04s 711168KB
stdin
Standard input is empty
stdout
Multiply: [0, -127, 98, 115, -101, -33, -118, 24, 23, 101, -54, -18, -19, 18, 119, -57, -30, -82, 94, -67, 35, 103, 120, 116, -66, 3, -1, -28, -93, -25, 74, -57, 12, 87, -33, 114, 3, 87, -60, 62, -51, 55, 6, 76, 120, 50, -26, 7, 121, 66, 81, -101, -76, -127, 13, 92, 29, -86, -84, 2, 126, -115, 23, 123, -35, 1, 104, -112, -46, 85, -54, -25, -105, 42, -59, 67, 16, 10, -78, -46, -90, 19, -1, 74, -34, 3, -123, 16, -33, -102, 116, 78, 61, -82, 15, -98, 123, -70, -61, 66, -8, -55, -64, 0, -21, 23, 15, 68, 17, 121, 57, 99, 113, -19, -49, -116, 64, -108, -78, 116, -89, 10, 10, 126, -99, -15, 66, -91, -126, 22, -81, 1, -64, 58, 110, 19, 104, 124, -10, 5, -26, -109, -16, 24, 17, -108, -115, 30, 65, 121, -96, -32, 23, 26, 68, -47, 114, -7, 21, 10, -81, -76, -116, -87, 49, 15, -6, 43, -49, 78, -98, 32, -21, -89, -70, -32, 126, -5, 33, -89, -98, 49, -116, 40, 88, 68, 117, 123, 11, 46, 92, 87, 21, -52, 98, -54, -77, 23, 57, -127, -32, -103, -113, 89, -24, -23, -69, 48, 7, 123, -98, -5, -82, -91, 32, 19, 32, -115, 23, -101, -9, -99, -92, 44, -12, -50, 50, 41, 79, -23, 22, -123, -90, -124, 33, 70, 85, -77, -16, -95, -88, 113, -113, -100, 112, -110, 104, -79, 52, 5, 98, 27, 38, 93, -60, 94, 105]

Multiply: [-127, 98, 115, -101, -33, -118, 24, 23, 101, -54, -18, -19, 18, 119, -57, -30, -82, 94, -67, 35, 103, 120, 116, -66, 3, -1, -28, -93, -25, 74, -57, 12, 87, -33, 114, 3, 87, -60, 62, -51, 55, 6, 76, 120, 50, -26, 7, 121, 66, 81, -101, -76, -127, 13, 92, 29, -86, -84, 2, 126, -115, 23, 123, -35, 1, 104, -112, -46, 85, -54, -25, -105, 42, -59, 67, 16, 10, -78, -46, -90, 19, -1, 74, -34, 3, -123, 16, -33, -102, 116, 78, 61, -82, 15, -98, 123, -70, -61, 66, -8, -55, -64, 0, -21, 23, 15, 68, 17, 121, 57, 99, 113, -19, -49, -116, 64, -108, -78, 116, -89, 10, 10, 126, -99, -15, 66, -91, -126, 22, -81, 1, -64, 58, 110, 19, 104, 124, -10, 5, -26, -109, -16, 24, 17, -108, -115, 30, 65, 121, -96, -32, 23, 26, 68, -47, 114, -7, 21, 10, -81, -76, -116, -87, 49, 15, -6, 43, -49, 78, -98, 32, -21, -89, -70, -32, 126, -5, 33, -89, -98, 49, -116, 40, 88, 68, 117, 123, 11, 46, 92, 87, 21, -52, 98, -54, -77, 23, 57, -127, -32, -103, -113, 89, -24, -23, -69, 48, 7, 123, -98, -5, -82, -91, 32, 19, 32, -115, 23, -101, -9, -99, -92, 44, -12, -50, 50, 41, 79, -23, 22, -123, -90, -124, 33, 70, 85, -77, -16, -95, -88, 113, -113, -100, 112, -110, 104, -79, 52, 5, 98, 27, 38, 93, -60, 94, 105]
Multiply: [57, 48, -14, 126, 29, 93, 91, 17, -109, 61, -88, 54, 30, 36, -28, 118, -104, 106, -36, -16, -91, 124, -73, -81, -23, -26, -27, -20, 106, 52, -89, -118, -40, 74, -40, -6, -40, 41, 32, 60, 121, -44, -28, -67, 127, -46, -88, -41, -46, 7, 2, -118, 102, -101, -34, 101, 113, 72, -82, -40, 5, -126, -89, -86, 102, 124, 40, 45, -48, -111, 53, -116, -77, -33, 56, 65, 93, 52, -24, 64, -110, 101, -17, -2, -72, -62, 89, -90, -100, 120, 45, 119, 61, 39, 105, -120, 60, 67, 111, -70, 116, 15, 64, -85, -85, 65, -66, -127, 39, 33, -109, 58, -114, -29, -25, 80, -39, 17, 7, -7, -102, 112, 36, 111, 125, -36, 102, 58, 7, -10, 113, 20, -9, 21, -6, -61, -88, 127, -52, 126, -17, -110, -45, -5, -118, 52, 73, -77, 40, 62, 87, -100, -60, -104, -30, -33, -65, 107, -71, -68, -127, -41, -111, 127, -128, -63, -26, -78, -26, 83, 122, -31, 79, -53, -101, -39, 63, 84, -93, 103, 22, -116, 23, -80, 82, -123, 89, -70, -100, 24, 46, -113, 104, -35, 111, 75, 85, -7, 54, 3, 85, -99, 100, 48, 32, 47, -103, 122, -106, 70, 95, 109, 17, 127, -43, 95, -69, 27, -18, -13, -23, -42, 103, -54, 117, 41, -88, -36, 53, -71, -87, -27, 71, -54, -104, 87, 36, 105, -22, 64, 33, 24, 19, 98, -84, -45, -120, -79, 43, 79, 39, -9, -71, 54, 92, -7]