Guest User

Untitled

a guest
Jun 19th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.26 KB | None | 0 0
  1. //FindSecretLinearMultiEquation finds the secrets
  2. func FindSecretLinearMultiEquation(x []int, y []int64, degree int) int {
  3. if len(x) < degree+1 || len(y) < degree+1 {
  4. return -1
  5. }
  6. var matrix [][]int64
  7. var foundSeed int
  8. for i := 0; i < degree+1; i++ {
  9. var vector []int64
  10. for j := 0; j < degree; j++ {
  11. vector = append(vector, int64(math.Pow(float64(x[i]), float64(j+1))))
  12. }
  13. vector = append(vector, 1)
  14. vector = append(vector, y[i])
  15. matrix = append(matrix, vector)
  16. }
  17. //printMatrix(matrix)
  18. transformMatrix(matrix)
  19. lastRow := matrix[len(matrix)-1]
  20. length := len(lastRow)
  21. printMatrix(matrix)
  22. foundSeed = int(lastRow[length-1] / lastRow[length-2])
  23. return foundSeed
  24. }
  25.  
  26. func transformMatrix(matrix [][]int64) {
  27. for i := 0; i < len(matrix)-1; i++ {
  28. for k := i + 1; k < len(matrix); k++ {
  29. transformRow(matrix[i], matrix[k], i)
  30. }
  31. }
  32. }
  33.  
  34. func transformRow(v1 []int64, v2 []int64, round int) {
  35. if v1[round] == 0 {
  36. SwapVector(v1, v2)
  37. } else if v2[round] != 0 {
  38. lcm := calculateLCM(
  39. int64(math.Abs(float64(v1[round]))),
  40. int64(math.Abs(float64(v2[round]))))
  41. timesV1 := lcm / v1[round]
  42. timesV2 := lcm / v2[round]
  43. AlgebraVector(v1, v2, "-", timesV1, timesV2)
  44. }
  45. }
  46.  
  47. func multiply(v []int64, a int64) {
  48. for i := 0; i < len(v); i++ {
  49. v[i] = a * v[i]
  50. }
  51. }
Add Comment
Please, Sign In to add comment