Le premier jour ne peut pas être un jour merveilleux car je n'ai pas mangé de gâteau la veille. Donc, si le nombre de petits gâteaux et de gâteaux au chocolat est différent, mangez le plus gros le premier jour. Après cela, vous pouvez manger en alternance.
A, B = map(int, input().split())
if A == B:
print(2 * A - 1)
else:
print(min(A, B) * 2)
Puisque le nombre à calculer n'a pas une fraction de 2 ou plus et 10 5 </ sup> ou moins, ce n'est pas un nombre premier, donc en bref, le produit de deux nombres premiers supérieurs à 10 5 </ sup> est dans l'ordre croissant. ..
Alors, trouvez un tel nombre premier de manière appropriée,
>>> for i in range(10**5, 10**5+1000):
... flag = True
... for j in range(2, int(sqrt(i))+1):
... if i % j == 0:
... flag = False
... break
... if flag:
... print(i)
...
100003
100019
100043
100049
100057
100069
100103
100109
100129
100151
...
Trouvez le produit par ordre croissant
>>> result = []
>>> for i in [100003,100019,100043,100049,100057,100069,100103,100109,100129,100151]:
... for j in [100003,100019,100043,100049,100057,100069,100103,100109,100129,100151]:
... result.append(i*j)
...
>>> print(sorted(set(result))[:10])
[10000600009, 10002200057, 10003800361, 10004600129, 10005200147, 10006000171, 10006200817, 10006800931, 10007200207, 10007601083]
Je l'ai intégré dans le code source.
N = int(input())
print([1, 10000600009, 10002200057, 10003800361, 10004600129, 10005200147, 10006000171, 10006200817, 10006800931, 10007200207][N - 1])
Je n'ai pas pu percer.
Tout d'abord, le coût est 0 ou 1. Parce que la paire de i, i + 1 est le coût 1. Après cela, si vous pensez que c'est fini si vous laissez tomber celui qui coûte 0 comme le tamis ératostinais, ce n'est pas le cas. Par exemple, s'il y a 2, 3 et 6, le coût sera 1 pour la paire de 2 et 3, mais le 3 pour la paire de 3 et 6 aura le coût de 0 et le 3 sera effacé. Vous pouvez obtenir un bel ensemble à un coût nul. En d'autres termes, vous pouvez effacer les éléments qui ont un multiple commun commun à un coût nul. Ensuite, vous pouvez résoudre le problème avec Union Find quant au nombre de syndicats.
from sys import setrecursionlimit
def find(parent, i):
t = parent[i]
if t < 0:
return i
t = find(parent, t)
parent[i] = t
return t
def unite(parent, i, j):
i = find(parent, i)
j = find(parent, j)
if i == j:
return
parent[i] += parent[j]
parent[j] = i
setrecursionlimit(10 ** 6)
L, R = map(int, input().split())
parent = [-1] * (R + 1)
for i in range(L, R):
if find(parent, i) != i:
continue
for j in range(i * 2, R + 1, i):
unite(parent, i, j)
print(sum(1 for i in range(L, R + 1) if find(parent, i) == i) - 1)
Recommended Posts