- import time
- #start_time = time.time()
- #def TIME_(): print(time.time()-start_time)
- import os, sys
- from io import BytesIO, IOBase
- from types import GeneratorType
- from bisect import bisect_left, bisect_right
- from collections import defaultdict as dd, deque as dq, Counter as dc
- import math, string, heapq as h
- BUFSIZE = 8192
- class FastIO(IOBase):
- newlines = 0
- def __init__(self, file):
- import os
- self.os = os
- self._fd = file.fileno()
- self.buffer = BytesIO()
- self.writable = "x" in file.mode or "r" not in file.mode
- self.write = self.buffer.write if self.writable else None
- def read(self):
- while True:
- b = self.os.read(self._fd, max(self.os.fstat(self._fd).st_size, BUFSIZE))
- if not b:
- break
- ptr = self.buffer.tell()
- self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
- self.newlines = 0
- return self.buffer.read()
- def readline(self):
- while self.newlines == 0:
- b = self.os.read(self._fd, max(self.os.fstat(self._fd).st_size, BUFSIZE))
- self.newlines = b.count(b"\n") + (not b)
- ptr = self.buffer.tell()
- self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
- self.newlines -= 1
- return self.buffer.readline()
- def flush(self):
- if self.writable:
- self.os.write(self._fd, self.buffer.getvalue())
- self.buffer.truncate(0), self.buffer.seek(0)
- class IOWrapper(IOBase):
- def __init__(self, file):
- self.buffer = FastIO(file)
- self.flush = self.buffer.flush
- self.writable = self.buffer.writable
- self.write = lambda s: self.buffer.write(s.encode("ascii"))
- self.read = lambda: self.buffer.read().decode("ascii")
- self.readline = lambda: self.buffer.readline().decode("ascii")
- sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
- input = lambda: sys.stdin.readline().rstrip("\r\n")
- def getInt(): return int(input())
- def getStrs(): return input().split()
- def getInts(): return list(map(int,input().split()))
- def getStr(): return input()
- def listStr(): return list(input())
- def getMat(n): return [getInts() for _ in range(n)]
- def getBin(): return list(map(int,list(input())))
- def isInt(s): return '0' <= s[0] <= '9'
- def ceil_(a,b): return (a+b-1)//b
- MOD = 10**9 + 7
- """
- """
- from random import randint as ri
- LIM = 10**6+1
- facs = [[] for _ in range(LIM+1)]
- def primes(n):
- for i in range(2,n):
- if not min_div[i]:
- for j in range(i,n,i):
- min_div[j] = i
- return
- min_div = [0]*(LIM+1)
- min_div[1] = 1
- primes(LIM+1)
- facs[1] = [1]
- for i in range(2,LIM+1):
- facs[i] = [1]
- j = i
- while j > 1:
- x = min_div[j]
- c = 1
- j //= x
- while min_div[j] == x:
- c += 1
- j //= x
- new = []
- curr = 1
- for cc in range(1,c+1):
- curr *= x
- for k in facs[i]:
- new.append(k*curr)
- facs[i] += new
- facs[i].sort()
- def solve2(tot,min_):
- if tot % min_: return None
- if not tot: return 0
- if tot == min_: return 0
- best = 0
- for x in facs[tot]:
- if x > max(2,min_) and x % min_ == 0:
- y = solve2(tot-x,x)
- if y is not None:
- best = max(best,y)
- #print(tot,min_,best)
- return 1 + best
- def solve(case):
- N = getInt()
- ans = solve2(N,1)
- print("Case #{}: {}".format(case,ans))
- #print("Case #{}: {}".format(case,' '.join(list(map(str,ans)))))
- return
- T = getInt()
- for _ in range(T):
- solve(_+1)
- #solve()
- #TIME_()