Эта программа делает простые множители чисел в С.премьер факторизации больших чисел, чем 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;
}
Эта программа прекрасно работает для чисел, меньших 10 . Но мой вопрос заключается в том, есть ли способ сделать эту программу даже для чисел вроде 10 . Я знаю, что int будет недостаточно, но когда я попытался использовать long int, это не сработало. Также я слышал что-то о malloc, но я продолжаю не реализовывать (понимать) его.
Учитывая 32 битной системы, '' int' и long' могут содержать как числа до (2^32)/2 -1. Вы можете использовать 'long long', который является 64-битным типом или, еще лучше,' uint64_t', который дает (2^64) -1. Диапазон целых значений обычно объясняется в первых главах каждой книги программирования C начального уровня. – Lundin
Вы хотите посмотреть на C целочисленные типы. – Olaf
@ Lundin Win64 также имеет 32 бит 'int' и' long'; последний для совместимости с Win32. – Olaf