2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Программа на GO работает нестабильно
Сообщение03.03.2023, 14:21 
Написал программу на GO, в которой реализовал этот алгоритм:
mathematician123 в сообщении #1583771 писал(а):
В случае $n \equiv 2 \pmod{8}$ мне удалось найти решения для всех $n < 50$. Для $n = 50$ получается уравнение
$$ x^2 - (2500s^2-1)y^2 = - 2s^3$$
При этом, $s \equiv 1 \pmod{4}$, $s \equiv 0 \pmod{3}$ или $s \equiv 1 \pmod{3}$, $y \equiv 1 \pmod{2}$, $y < \frac{s}{7}$. Для $s \le 50000$ решений нет.

Код:
Код:
package main

import (
   "fmt"
   "math/big"
)

func main() {
   var s int64
   var y int64
   var mul int64
   var limit int64 = 100000
   var n int64
   is_find := 0

   fmt.Scanln(&n)

   for s = 1; s < limit; s += 4 {
      if is_find == 1 {
         break
      }
      if s%5000 == 1 {
         fmt.Println(s)
      }

      if (s%9 == 3) || (s%9 == 6) {
         continue
      }
      if (s%7 == 0) && (s%49 != 0) {
         continue
      }
      if s%3 == 0 {
         mul = 27
      } else {
         mul = 1
      }

      for y = 1; y < s/6; y += 2 * mul {
         sBig := big.NewInt(s)
         yBig := big.NewInt(y)
         v1 := big.NewInt(s)
         v1.Mul(v1, sBig)
         v1.Mul(v1, big.NewInt(n*n))
         v1.Sub(v1, big.NewInt(1))
         v1.Mul(v1, yBig)
         v1.Mul(v1, yBig)
         v2 := big.NewInt(s)
         v2.Mul(v2, sBig)
         v2.Mul(v2, sBig)
         v2.Mul(v2, big.NewInt(2))
         v1.Sub(v1, v2)

         if v1.Cmp(big.NewInt(0)) == -1 {
            continue
         }

         v2.Sqrt(v1)
         v2.Mul(v2, v2)

         if v1.Cmp(v2) == 0 {
            fmt.Println(s, y)
            is_find = 1
            break
         }
      }
   }
}

Программа работает нестабильно. Например, при вводе 42 она иногда печатает строку с решением "1765 27", а иногда почему-то не печатает. Как сделать так, чтобы строка с решением всегда печаталась?

 
 
 
 Re: Программа на GO работает нестабильно
Сообщение03.03.2023, 14:58 
А если после строки fmt.Scanln(&n) добавить строку с fmt.Println("n=", n-1) то что печатает после "n=" когда ответ не печатает?

 
 
 
 Re: Программа на GO работает нестабильно
Сообщение03.03.2023, 15:18 
wrest
Печатает -1. А когда всё нормально, печатает 41. Получается, $n$ иногда к нулю приравнивается.

 
 
 
 Re: Программа на GO работает нестабильно
Сообщение03.03.2023, 15:22 
mathematician123 в сообщении #1584088 писал(а):
Печатает -1. А когда всё нормально, печатает 41. Получается, $n$ иногда к нулю приравнивается.

Типа того.

 
 
 
 Re: Программа на GO работает нестабильно
Сообщение03.03.2023, 15:31 
Похоже дело не в программе, а в том, как я её запускаю. Проблема возникает когда я в командной строке ввожу "go run main.go", а затем "42". Сейчас я ввёл "go build main.go" и в папке появился файл "main.exe". Этот файл при запуске всегда правильно отрабатывает.

 
 
 
 Re: Программа на GO работает нестабильно
Сообщение03.03.2023, 15:45 
mathematician123
Ну, всегда полезно контролировать, что именно программа получает на вход. Особенно если работает не как ожидается. И ещё более особенно, если осуществляется конвертация типов.

 
 
 
 Re: Программа на GO работает нестабильно
Сообщение03.03.2023, 16:18 
Спасибо!

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group