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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
|
#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
# Série communs. En Général Python
# Version : Première facture
# Programmes NphParty_0a : 2 avril 2017
#########################################################
"""
Ce programme a une définition harmonique basée sur un nombre
unique, il énumère en une série de couplages un ensemble
de multiples communs. C'est en voulant être plus rapide, que
les opérations se sont dirigées vers les couples. Dans le but
de trouver un nombre moins conséquent, nous donnant en un
moindre temps de calcul le résultat réel.
NphParty_4.py : 15 avril 2017
Music@toumic
"""
#########################################################
import time
from math import sqrt
depart = time.time()
# Tables connexées
ipba = [] # Plus petit commun
dvba = [] # Tableau primaire
ipso = [] # Transfert dico
ipho = [0] # sous-multiple
sq1 = [0]
ipdv = {}
def nombre(n_):
"""
Cette fonction trouve le plus petit
couple multiple de bas niveau, et
enregistre les couplages
"""
norg = n_
co6 = norg % 6
# Le plus petit nombre commun
def cobas(c_):
corg = c_
csq1 = int(sqrt(corg))
if corg == norg:
sq1[0] = csq1
# Couple de bas niveau
for cu in range(csq1, 0, -1):
if not corg % cu:
ip = cu
dv = corg//cu
cipdv = ip, dv, corg
ipba.append(cipdv)
break
# Communs du sous-multiple
def souscom():
"""
Les couples de bas niveaux :ipba:, sont
utilisés pour être simplifiés.
"""
ip1 = dv1 = 0
if ipba[1][0] == 1: # Nombre premier
ip1 = 1
if ipba[2][0] == 1: # Nombre premier
dv1 = 1
if ip1 + dv1 == 2: # Nombres premiers
scip = ipba[0][:2], ipba[0][:2]
elif ip1 + dv1 == 1: # Un sur deux premier ?
if ip1 - dv1 < 0: # :(ip1=0)-(dv1=1)=-1:
scip = ipba[1], ipba[2][:2]
else: # :(ip1=1)-(dv1=0)=1:
scip = ipba[1][:2], ipba[2]
else: # Nombre premier absent
scip = ipba[1], ipba[2]
dvba.append(1)
for sp in scip:
for si in sp:
if si not in dvba:
dvba.append(si)
dvba.sort()
"""
:dvba: Conteneur élémentaire - bas niveau
"""
for sd in dvba[1:]: # Distribution du bas niveau
sdi6 = sd % 6
sdd6 = (norg // sd) % 6
if sd in ipba[0]: # :ipba[0]: Partie initiale
if ip1 == 1: # Rappel Nombre Premier
snbr = sd
break
elif dv1 == 1: # R N P
snbr = norg // sd
break
elif sd not in ipba[0]: # Nombre non initial
if sdi6 in (1, 5) and sdd6 == co6\
and sd > 1: # Option Type
snbr = norg // sd
break
elif sdi6 == co6 and sdd6 in (1,5): # O T
snbr = sd
break
else: # Echec et méthode classique
if ipba[0][0] == ipba[0][1]: # Correction
sdmin = dvba[0]
else:
sdmin = dvba[-2]
sdmin = dvba[1]
for mnx in range(sdmin, 2, -1):
sdmnx = norg // mnx
mnx6 = mnx % 6
if not norg % mnx and mnx6 in (1, 5):
snbr = sdmnx
break
print('snbr', snbr) # :snbr: Sélection
sqnbr = int(sqrt(snbr))
for sid in range(1, sqnbr + 1):
if not snbr % sid and sid not in ipso:
ipso.append(sid)
ipso.append(snbr//sid)
def communs(i_):
"""
Transmission de la composition :ipso:
Conteneur des éléments de couplage
"""
for ic in i_:
if ic > sq1[0]:
if norg//ic not in list(ipdv.keys()):
ipdv[norg//ic] = ic
else:
if ic not in list(ipdv.keys()):
ipdv[ic] = norg//ic
for ip, dv in sorted(ipdv.items()):
yield ip, dv
# C Party
cobas(norg)
cobas(ipba[0][0])
cobas(ipba[0][1])
souscom()
ipso.sort()
com = communs(ipso)
stop = topo = 0
co = ''
for c in com:
if stop < 5: # Pour éviter l'écriture
co += '{} * {} Tp {}*{}\n'.format(c[0], c[1],c[0]%6,c[1]%6)
stop += 0 # Pour mettre à 1
topo += 1
else: break
print('Ed', topo, 'typ', norg % 6, 'sq1', sq1[0])
print('{}NphParty_4cosic.py En {}'.format(co, time.time() - depart))
nbr = 4356
print('Cosmic', nbr)
nombre(nbr)
"""
Le développement en cours a des zones de captation
1: La zone la plus évoluée est celle de la racine carrée
L'espace minimum requis
2: Puis, la zone du niveau bas au premier tableau :ipba[0]:
Lors d'une racine carrée:
Indice de l'intégralité du couple
3: Sinon, :dvba: effectue un tri de type (%6)
Selon un :ip: dans type (1, 5)
Et un :dv: dans la table :co1:
:co1: réunit les types :dvba:
"""
# |