Ce programme fait le premier factorisation des nombres dans C.premier factorisation des nombres plus grands que int
#include <stdio.h>
int main(void) {
int number, i, p, n, factors, count;
int numbers[1000000];
int counter = 0;
char text[100000];
for (count = 0; count < 1000000; count++) {
fgets(text, 10000000, stdin);
if (sscanf(text, "%d", &number) == 1) {
if (number == 0)
break;
numbers[count] = number;
} else {
numbers[count] = 0;
}
}
counter = 0;
for (i = 0; i < count; i++) {
if ((numbers[i] < 0) || (numbers[i] == 0)) {
fprintf(stderr, "Error: Wrong Input!\n");
return 100;
break;
}
number = numbers[i];
printf("Prime factorization of nubmer %d is:\n", number);
factors = 0;
for (p = 2; p * p <= number; p += 1 + (p & 1)) {
if (number % p == 0) {
n = 0;
factors++;
do {
number /= p;
n++;
} while (number % p == 0);
if (n == 1) {
printf("%d ", p);
++counter;
} else
printf("%d^%d ", p, n);
++counter;
if (count > 0 && number != 1)
printf("x ");
}
}
if (factors == 0 || number != 1)
printf("%d", number);
printf("\n");
}
return 0;
}
Ce programme fonctionne très bien pour les nombres inférieurs à 10 . Mais ma question est, s'il y a un moyen de faire ce programme même pour des numéros comme 10 . Je sais que int ne serait pas suffisant, mais quand j'ai essayé par exemple long int, cela n'a pas fonctionné. J'ai aussi entendu quelque chose à propos de malloc, mais je continue de ne pas l'implémenter.
Etant donné un système à 32 bits, '' int' et long' peut contenir à la fois des nombres jusqu'à (2^32)/2 -1. Vous pouvez utiliser 'long long' qui est un type 64 bits, ou mieux encore,' uint64_t' qui donne (2^64) -1. La plage de valeurs entières est généralement expliquée dans les premiers chapitres de chaque livre de programmation de niveau débutant. – Lundin
Vous voulez voir les types d'entiers C. – Olaf
@Lundin Win64 a également 32 bits 'int' et' long'; ce dernier pour la compatibilité avec Win32. – Olaf