Загрузка данных


МНОЖЕСТВА:

from itertools import combinations

p = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}
q = {3, 6, 9, 12, 15, 18, 21, 24, 27, 30}

r = []

def f(x):
    P = x in p
    Q = x in q
    A = x in a
    return (A <= P) and ((not Q) <= (not A))

for i in range(1, 11):
    for a in combinations(p, i):
        if all(f(x) for x in p):
            r.append(len(a))
print(max(r))

НЕ МНОЖЕСТВА И НЕ ОТРЕЗКИ:

for a in range(1, 10000):
    if all((x & 52 != 0 and x & 48 == 0) <= (not x & a == 0) for x in range(1, 1000)):
        print(a)
        break

ОТРЕЗКИ

def f(x):
    P = 15 <= x <= 142
    Q = 38 <= x <= 167
    A = a1 <= x <= a2
    return not(Q <= (((not A) and P) <= (not Q)))

r = []

d = [y for x in (15, 38, 142, 167) for y in (x, x-0.01, x+0.01)]

for a1 in d:
    for a2 in d:
        if a2 > a1 and all(not f(x) for x in d):
            r.append(a2-a1)
print(min(r))

вот так определяем простоту числа:
def p(x): return x > 1 and all(x % d for d in range(2, int(x**0.5) + 1))


вот так все делители:
def d(x):
    d = []
    for i in range(1, int(x**0.5) + 1):
        if x % i == 0:
            d.append(i)
            d.append(x // i)
    return d


вот так ищем простые делители:
def p(x): return x > 1 and all(x % d for d in range(2, int(x**0.5) + 1))

def d(x):
    d = set()
    for i in range(2, int(x**0.5) + 1):
        if x % i == 0:
            if p(i): d.add(i)
            if p(x // i): d.add(x // i)
    return d


вот так простые множители:
def d(x):
    d = []
    i = 2
    while i * i <= x:
        while x % i == 0:
            d.append(i)
            x //= i
        i += 1
    if x > 1: d.append(x)
    return d

маски:
from fnmatch import fnmatch

for x in range(7993, 10**10 + 1, 7993):
    if fnmatch(str(x), '4*4736*1'):
        print(x, x // 7993)


множители:
def f(x):
    d = []
    i = 2
    while i * i <= x:
        while x % i == 0:
            d.append(i)
            x //= i
        i += 1
    if x > 1: d.append(x)
    return d

x, k = 7305679, 0
while k < 5:
    m = f(x)
    if len(m) == 4 and str(sum(m)) == str(sum(m))[::-1]:
        print(x, sum(m))
        k += 1
    x += 1


делители:
def f(x):
    d = set()
    for i in range(1, int(x**0.5) + 1):
        if x % i == 0:
            d.add(i)
            d.add(x // i)
    return d

x, k = 178965, 0
while k < 4:
    m = f(x)
    if len(m) == 4:
        print(*sorted(m, reverse=True))
        k += 1
    x += 1


27:

from math import dist

filea = open('27A_27593.txt')
data = []
clusters = []

for line in filea:
  x, y = [float(k) for k in line.replace(',', '.').split()]
  data.append([x, y])

while data:
  clusters.append([data.pop(0)])
  for p in clusters[-1]:
    near = [p1 for p1 in data if dist(p, p1) < 1]
    clusters[-1].extend(near)
    for j in near: data.remove(j)
print(*[len(cl) for cl in clusters])

def centroid(cl):
  m = []
  for p in cl:
    sm = sum(dist(p, p1) for p1 in cl)
    m.append([sm, p])
  return min(m)[1]

centroids = [centroid(cl) for cl in clusters]
print(centroids)