using System; using static System.Console; using System.Linq; using System.Collections.Generic; using System.Globalization; using System.Runtime.CompilerServices; class Program { static int NN => int.Parse(ReadLine()); static long[] NList => ReadLine().Split().Select(long.Parse).ToArray(); static string[] SList(long n) => Enumerable.Repeat(0, (int)n).Select(_ => ReadLine()).ToArray(); public static void Main() { Solve(); } static void Solve() { var p = NList; var (a, b, c) = (p[0], p[1], p[2]); WriteLine(Point(a, b, c)); } static long Point(long a, long b, long c) { var r = Sqrt(b * b - 4 * a * c); if (r * r < b * b - 4 * a * c) ++r; if (a > 0) { // -r < 2ax + b < r var ng = -1L; while (-r <= 2 * a * ng + b) ng <<= 1; var ok = 1L; while (-r >= 2 * a * ok + b) ok <<= 1; while (ok - ng > 1) { var mid = (ok + ng) / 2; if (-r < 2 * a * mid + b) ok = mid; else ng = mid; } var left = ok; ng = 1L; while (r >= 2 * a * ng + b) ng <<= 1; ok = -1L; while (r <= 2 * a * ok + b) ok <<= 1; while (ng - ok > 1) { var mid = (ok + ng) / 2; if (r > 2 * a * mid + b) ok = mid; else ng = mid; } return Math.Max(0, ok - left + 1); } else { // -r < 2ax + b < r var ng = 1L; while (-r <= 2 * a * ng + b) ng <<= 1; var ok = -1L; while (-r >= 2 * a * ok + b) ok <<= 1; while (ng - ok > 1) { var mid = (ok + ng) / 2; if (-r < 2 * a * mid + b) ok = mid; else ng = mid; } var right = ok; ng = -1L; while (r >= 2 * a * ng + b) ng <<= 1; ok = 1L; while (r <= 2 * a * ok + b) ok <<= 1; while (ok - ng > 1) { var mid = (ok + ng) / 2; if (r > 2 * a * mid + b) ok = mid; else ng = mid; } return Math.Max(0, right - ok + 1); } } static long Sqrt(long a) { var r = (long)Math.Sqrt(a); if ((r + 1) * (r + 1) <= a) return r + 1; return r; } }