Skip to content

Instantly share code, notes, and snippets.

@okaq
Created April 18, 2013 17:31
Show Gist options
  • Save okaq/5414628 to your computer and use it in GitHub Desktop.
Save okaq/5414628 to your computer and use it in GitHub Desktop.
/*
* palindromic squares generator
*
*/
package main
import (
"bufio"
"fmt"
"os"
"math/big"
"strings"
)
const (
path = "ps.txt"
)
var (
file *os.File
writer *bufio.Writer
number *big.Int
)
func files() {
var err error
file, err = os.Create(path)
if err != nil {
fmt.Println(err)
}
writer = bufio.NewWriter(file)
}
func cleanup() {
writer.Flush()
var err error
err = file.Close()
if err != nil {
fmt.Println(err)
}
}
func generate() {
number = big.NewInt(0)
one := big.NewInt(1)
for i := 0; i < 20000003; i++ {
m0 := mirror(number)
if m0 {
// fmt.Println(number, m0)
square := big.NewInt(0)
square.Mul(number, number)
m1 := mirror(square)
if m1 {
fmt.Println(number, square, m1)
output(number.String(), square.String())
}
}
number.Add(number, one)
}
}
func mirror(n0 *big.Int) bool {
// palindrome test
s0 := n0.String()
if len(s0) == 1 {
return true
}
a0 := strings.Split(s0, "")
b0 := true
for i := 0; i < len(a0) / 2; i++ {
if a0[i] != a0[len(a0)-1-i] {
b0 = false
break
}
}
return b0
}
func output(n0 string, s0 string) {
s1 := fmt.Sprintf("%s %s\n", n0, s0)
writer.WriteString(s1)
}
func main() {
files()
defer cleanup()
generate()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment