2012-05-07 3 views
-4

J'ai une équation ((1 -/+ p)/6) % p, que j'ai besoin de courir pour quelques millions de valeurs de p.Quelle est la façon pythonique de calculer des équations avec des racines différentes?

Le code que j'ai actuellement est

primes = [5,7,11,13,17,19,23,29,31,37,41,43,47, 
      53,59,61,67,71,73,79,83,89,97] 

if __name__ == "__main__": 

    for p in primes: 

     print ((1 - p)/6) % p, ((1 + p)/6) % p 

qui, comme prévu, me donne

4 1 
6 1 
9 2 
11 2 
14 3 
16 3 
19 4 
24 5 
26 5 
31 6 
34 7 
36 7 
39 8 
44 9 
49 10 
51 10 
56 11 
59 12 
61 12 
66 13 
69 14 
74 15 
81 16 

Ce que je voudrais savoir est comment obtenir

1 
6 
2 
11 
3 
16 
4 
5 
26 
31 
7 
36 
8 
9 
10 
51 
56 
12 
61 
66 
14 
15 
81 

I Je n'ai encore rien essayé, j'ai lancé l'idée d'utiliser un générateur. Cependant, ce faisant, je ne sais pas si je vais rencontrer des problèmes de performance.

+1

Voulez-vous imprimer le premier numéro deux fois? Ensuite, mettez-le deux fois! Qu'est-ce que cela a à voir avec les générateurs? – rodrigo

+0

@rodrigo Je vais le faire fonctionner quelques millions de fois ... les factoriels deviennent chers après des millions de fois, le factorial ne sera pas là. Il est seulement là maintenant à des fins d'illustration. Je vais l'enlever. – John

+0

Comment avez-vous trouvé ces «solutions»? – Avaris

Répondre

3

Est-ce ce que vous cherchez?

for p in primes: 
    r1=f(p - 4) % p 
    r2=((1 - p)/6) % p 
    if r2==r1: 
     print r1, r2 
    else: 
     print r1, ((1 + p)/6) % p 

Lorsque vous dites que vous n'avez encore rien essayé, n'essayez pas encore de l'optimiser! Obtenez simplement quelque chose qui produit ce que vous voulez - PUIS vous soucier de l'utilisation d'un générateur ou des problèmes de performance.

Edit:

Vous avez changé votre question essentiellement, et on ne sait pas ce que vous cherchez plus. Si vous cherchez des racines, here is some code.

Scipy a également de nombreuses méthodes de recherche de racines. Choisissez une direction - faites fonctionner quelque chose - ALORS essayez de la réparer si elle est trop lente.

+5

Vous devriez obtenir un badge 'télépathique' pour cette réponse –

Questions connexes