Un concept, le plus grand commun diviseur
Le plus grand facteur commun, aussi connu comme le dénominateur commun, le plus grand diviseur commun, fait référence à deux ou plusieurs nombres entiers d'environ un maximum. a, b est désigné comme le plus grand diviseur commun (a, b), la même chose, a, b, c appelé le plus grand diviseur commun (a, b, c), le plus grand diviseur commun des nombres entiers ont le même signe. Le plus grand diviseur commun de langage C, il existe différentes méthodes sont principale méthode de décomposition de facteur commun, la division courte, euclidienne, la méthode diminue.
En second lieu, trouver le plus grand commun diviseur des trois méthodes en C
① euclidienne plus grand commun diviseur
Introduction aux algorithmes: « euclidien » aussi appelé « algorithme d'Euclide »
Avec quelques chiffres algorithme d'Euclide recherche le plus grand diviseur commun, dans lequel le plus grand commun diviseur calculé peut premier nombre arbitraire de deux, puis rechercher le plus grand diviseur commun et le plus grand diviseur commun du troisième numéro, la recherche se poursuit séquentiellement jusqu'à ce que le dernier nombre jusqu'à présent. Le résultat final que le dénominateur commun est le dénominateur commun de tous ces chiffres.
Les deux nombres a, b division, si le reste est pas égal à c 0, pour mettre la valeur des valeurs b de a, b à c, c est égal à 0 jusqu'à ce moment est le plus grand commun diviseur de b
Flowchart:
code d'algorithme en langage C:
[Cpp] vue simple copie
// utilisé pour calculer le temps
inline __int64 non signé GetCycleCount ()
{
__asm
{
_emit 0x0F;
_emit 0x31;
}
}
// algorithme d'Euclide
Zhanzhuan vide ()
{
int a = 0, b, c, m, n;
à long starttime, endtime, alltime, fréq;
unsigned long t1, t2;
LARGE_INTEGER num;
QueryPerformanceFrequency (& num);
freq = num.QuadPart;
printf ( "Entrez deux chiffres demandent \ n");
t1 = (unsigned long) GetCycleCount (); // start timing de
scanf ( "% d% d", et a, et b);
m = a;
n = b;
© tandis que // si c est égal à 0, le plus grand commun diviseur est b
{
c = a% b; // c est le reste d'un divisé par b
si © // 0 si c est pas égale à la valeur de b pour mettre a, c à la valeur de b
{
a = b;
b = c;
}
}
t2 = (unsigned long) GetCycleCount ();
printf ( "% d et dont le dénominateur commun est le% d:% d \ n", m, n, b);
printf ( "temps utilisé:% f \ n secondes", (t2 - t1) * 1,0 / FREQ);
printf ( "\ n");
}
② Diminue Technique plus grand commun diviseur
Introduction aux algorithmes: « Diminutions loi » - de « neuf chapitres sur Arithmétique »
Première étape: deux pour tout entier positif donné, déterminer si elles sont encore. Si oui, avec 2 la réduction, sinon alors la deuxième étape.
La deuxième étape: la réduction du nombre de plus grand nombre de plus petits, puis la comparaison de la différence qui en résulte est faible et le nombre, et de réduire le nombre des grands nombres. Cette opération se poursuit jusqu'à ce que la soustractif et résultante de différence égale.
Le produit du premier nombre de pas d'environ 2, et la seconde étape sur le support est le nombre souhaité de plus grand commun diviseur.
Dans lequel ladite, « et plusieurs » est le plus grand commun diviseur. La méthode de recherche « et plusieurs » approche « Diminutions ». Ainsi, la loi Diminutions, également connu comme l'équivalence algorithme.
Les deux nombres en soustrayant un plus grand nombre de plus petit nombre b, c, si la différence est égale à 0, alors le plus grand commun diviseur de b, sinon égal à 0, la valeur de a à b, b à la valeur c, poursuivre jusqu'à ce que la soustraction est égal à 0.
Flowchart:
code d'algorithme en langage C:
[Cpp] vue simple copie
inline __int64 non signé GetCycleCount ()
{
__asm
{
_emit 0x0F;
_emit 0x31;
}
}
GXJS void ()
{
int a, b, c, m, n;
à long starttime, endtime, alltime, fréq;
unsigned long t1, t2;
LARGE_INTEGER num;
QueryPerformanceFrequency (& num);
freq = num.QuadPart;
printf ( "Entrez les deux numéros nécessaires \ n");
scanf ( "% d% d", et a, et b);
t1 = (unsigned long) GetCycleCount (); // start timing de
m = a;
n = b;
tandis que © // Si la différence est égale à 0, la fin du cycle, le dénominateur commun est b
{
si (a> b) // comparer la taille de deux nombres
c = a - b;
autre
c = b -a;
si © // La différence est égale à 0, la valeur d'échange
{
a = b;
b = c;
}
}
t2 = (unsigned long) GetCycleCount ();
printf ( "% d et le plus grand diviseur commun de% d:% d \ n", m, n, b);
printf ( "temps utilisé:% f \ n secondes", (t2 - t1) * 1,0 / FREQ);
printf ( "\ n");
}
③ plus grand commun diviseur exhaustif
Présentation algorithme: Les deux nombres a, b plus petite valeur attribuée à i, divisée par la a i, b i est également divisée, si le reste est en même temps tous les deux 0, alors i est le maximum des deux diviseur. Si pas égal à 0, i-1, continue à être divisé par un i, b est divisé par i, jusqu'à ce que le reste est égal à zéro en même temps.
Flowchart:
code d'algorithme en langage C:
[Cpp] vue simple copie
// utilisé pour calculer le temps
inline __int64 non signé GetCycleCount ()
{
__asm
{
_emit 0x0F;
_emit 0x31;
}
}
qiongju vide ()
{
int a, b, c, i, m, n;
à long starttime, endtime, alltime, fréq;
unsigned long t1, t2;
LARGE_INTEGER num;
QueryPerformanceFrequency (& num);
freq = num.QuadPart;
printf ( "Entrez les deux numéros nécessaires \ n");
scanf ( "% d% d", et a, et b);
m = a;
n = b;
si (a> b) // une valeur plus faible est affecté à i
i = b;
autre
i = a;
pour (i; i> 0; i-)
{
Si si (a% i == 0 && b% i == 0) // reste simultanément 0 est déterminé
break; // hors de la boucle
}
t2 = (unsigned long) GetCycleCount ();
printf ( "% d et le plus grand diviseur commun de% d% d \ n", m, n, i);
printf ( "temps utilisé:% f \ n secondes", (t2 - t1) * 1,0 / FREQ);
printf ( "\ n");
}
Conseils plus de diviseur commun du langage C: « alignement de mémoire » principe, chaque alignement à un nombre variable de multiples entiers de alignés [aligner leur taille et leur nombre est égal à la valeur par défaut du nombre variable de petit alignement].