예제 #1
0
Note - The program takes about 5-6 minutes. Although the implementation uses a
    linear solution to find the disconnected components, python slows it
    down :(. Prime number generation alone takes up about 1 minute for all
    the inputs of the large dataset.

Comparison between Union-find and undirected-graph on large Dataset:
    UnionFind - 6m 14s
    Undirected Graph - 5m 37s
"""

import os
import sys
import math
sys.path.append(os.path.abspath('./src/helpers'))
from math_utils import prime_numbers
from graphs import Graph

f = open(sys.argv[1])
T = int(f.readline().strip())
for cc in range(T):
    # integer lists
    A, B, P = map(int, f.readline().strip().split(" "))
    p_nums = prime_numbers(min(B / 2 + 1, B - A)) - set(range(P))
    g = Graph(range(A, B + 1))
    for i in p_nums:
        start = int(i * (math.ceil(A / float(i))))
        for j in range(start + i, B + 1, i):
            g.add_unidrected_edge(start, j)
    print("Case #%d: %s" % (cc + 1, str(g.num_connected_components())))
f.close()