Разложение на простые множители - C (СИ) (80061)
Формулировка задачи:
Требуется вывести представление целого числа N в виде произведения простых чисел.
Входные данные
Входной файл INPUT.TXT содержит натуральное число N (2 <= N <= 2^31-1).
Выходные данные
В выходной файл OUTPUT.TXT выведите список простых множителей числа N в порядке неубывания, разделенных знаком «*».
В моей программе ошибка с типом переменной n, так как sqrt(n) уже не целое число, но если поменять на float, то не допустимо n%i и n = n/i. Помогите исправить.
#include <stdio.h>
#include <math.h>
int main()
{
long n,i;
FILE *fin, *fout;
fin=fopen("input.txt","r");
fout=fopen("output.txt","w");
fscanf(fin, "%ld",&n);
i = 2;
while (i<=sqrt(n))
if ((n%i)==0){
fprintf(fout, "%ld*",i);
n = n/i;
}
else
i = i+1;
fprintf(fout, "%ld",n);
fclose(fin);
fclose(fout);
return 0;
}Решение задачи: «Разложение на простые множители»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
int main()
{
double n, i;
FILE *fin, *fout;
fin=fopen("input.txt","r");
fout=fopen("output.txt","w");
fscanf(fin, "%lf", &n);
i = 2;
while (i<=sqrt(n))
if((int)n % (int)i == 0) {
fprintf(fout, "%.0lf*",i);
n = n/i;
} else
i = i+1;
fprintf(fout, "%.0lf",n);
fclose(fin);
fclose(fout);
return 0;
}
Объяснение кода листинга программы
В этом коде выполняется разложение числа на простые множители. Вот список действий, которые происходят в коде:
- Входные данные считываются из файла
input.txt. - Выходные данные записываются в файл
output.txt. - Переменная
nинициализируется значением, считанным из файла. - Переменная
iинициализируется значением 2. - Цикл while начинается, в котором переменная
iпроверяется на делимость на нее числаn. - Если число делится на
iбез остатка, тоiдобавляется к выходным данным как множитель, аnделится наi. - Если число не делится на
iбез остатка, тоiувеличивается на 1. - Цикл while продолжается, пока
iменьше или равно квадратному корню изn. - После окончания цикла, оставшееся число
nзаписывается в выходной файл как последний множитель. - Файлы
input.txtиoutput.txtзакрываются. - Программа возвращает 0, что означает успешное выполнение.