Bonjour, je me lance dans la programmation compétitive et je cré un poste pour vous demander de l’aide de manière régulière (plutôt que de polluer de posts identiques). De plus je souhaite publier des tribunes quand j’aurais quelque chose d’intéressant à dire du coup je me suis dis qu’un sujet serait aussi utile.
En tout cas me voici avec une première question et un premier problème :
Edit : Les règles de ce premier défi. L’input pour chaque test ce sont deux nombres : les deux bornes dans lesquels on doit chercher les nombres premiers. L’output ce sont tout les nombres premier entre ces deux bornes avec un nombre par ligne. Entre deux test on doit sauter une ligne
Je suis sur SPOJ et suis sur le deuxième problème (faut bien commencer). Je me prend la tête depuis déjà deux jours à cause des TLE (Time Limit Exceeded) quand ça fonctionne sur mon ordi. J’ai réussit à résoudre le problème et mon code s’exécute en 1.37s sur ideone mais en voici un autre : je n’ai pas la bonne réponse. Je sais que mon algorithme est bon d’après les tests que j’ai pu faire. Je n’arrive donc pas à comprendre pourquoi. Voici ma solution (si quelque chose n’est pas clair dîtes moi) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | # Prime1 on SPOJ - SpheOnlineJudge.com import sys import math def prime_sieve(start, end): nb = [False, False] + [True for i in range(2, end + 1)] # 0 and 1 to False output = [] i = 2 while i < len(nb): if nb[i]: if i >= start: output.append(i) for j in range(i, len(nb), i): nb[j] = False while i < len(nb) and not nb[i]: i += 1 return output def main(): nb_test = int(sys.stdin.readline()) for e in range(nb_test): start, end = map(int, sys.stdin.readline().split(" ")) primes = prime_sieve(2, math.ceil(math.sqrt(end))) if start == 1 or start == 2: print(2) start = 3 for i in range(start, end + 1): is_prime = True for p in primes: if i % p == 0: is_prime = False break if is_prime: print(str(i)) print() # New line and each test case if __name__ == '__main__': main() |
En espérant que vous puissiez m’aider. Je passe par pure frustration