package main

import (
	"fmt"
	"os"
	"strconv"
)

// go run 15.go inputA inputB

func main() {

	genA,_ := strconv.Atoi(os.Args[1])
	genB,_ := strconv.Atoi(os.Args[2])

	rounds1 := 40000000
	rounds2 := 5000000

	fmt.Println(Calc(genA, genB, 1,1,rounds1))
	fmt.Println(Calc(genA, genB, 4,8,rounds2))
}


func Calc (genA int, genB int, modA int, modB int, rounds int) int {
	genAFactor := 16807
	genBFactor := 48271
	div := 2147483647
	judge := 0

	for i := 0; i < rounds; i++ {

		for {
			genA = (genA * genAFactor) % div
			if genA % modA == 0 {
				break
			}
		}

		for {
			genB = (genB * genBFactor) % div
			if genB % modB == 0 {
				break
			}
		}

		tA := genA
		tA = tA % 65536

		tB := genB
		tB = tB % 65536

		if tA == tB {
			judge++
		}
	}
	return judge
}