本文共 1547 字,大约阅读时间需要 5 分钟。
为了解决这个问题,我们需要计算给定的整数 ( k ) 所在的最长的连续合数区间的长度。如果 ( k ) 本身是质数,则输出 0。
import sysimport bisectdef main(): max_prime = 1299709 is_prime = [True] * (max_prime + 1) is_prime[0] = is_prime[1] = False for i in range(2, int(max_prime ** 0.5) + 1): if is_prime[i]: for j in range(i * i, max_prime + 1, i): is_prime[j] = False primes = [i for i, val in enumerate(is_prime) if val] for line in sys.stdin: k = int(line.strip()) if k == 0: break if k == 1: print(0) continue pos = bisect.bisect_left(primes, k) if pos < len(primes) and primes[pos] == k: print(0) else: if pos == 0: p1 = None p2 = primes[0] elif pos == len(primes): p1 = primes[-1] p2 = None else: p1 = primes[pos - 1] p2 = primes[pos] if p1 is None or p2 is None: print(0) else: length = p2 - p1 - 1 print(length)if __name__ == "__main__": main()
primes,其中包含所有小于等于 1299709 的质数。这个方法高效地处理了问题,确保在合理的时间内完成任务。
转载地址:http://hfxfk.baihongyu.com/