AlexanderSitnik
@AlexanderSitnik
Студент ТУСУРа

Скажите пожалуйста, где ошибка? Задание звучит так: «Получить все простые делители числа»?

var n,i,k,count: integer;
begin
writeln('Введите натуральное число: ');
readln(n);
count:=0;
for i:=2 to n-1 do begin
                    if n mod i = 0 then begin
                                            for k:=1 to i-1 do
                                            if (i mod k = 0) then begin
                                              count+=1;
                                              if count<=2 then
                                                            writeln(i, ' ');
                                            end;
                                      end;
                         end;
                    
end.
  • Вопрос задан
  • 248 просмотров
Решения вопроса 1
alsopub
@alsopub
Кажется ошибка как минимум тут - k:=1 - любое число делится на 1 без остатка.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
gbg
@gbg
Любые ответы на любые вопросы
count=0 должно быть после begin
Ответ написан
Ошибка - что count не очищаете для перед циклом с k; ну и k, как сказали выше, нужно начинать с 2, так как любое число делится на 1.

Ещё i можно начинать с 2 и до (n/2) - поскольку делителей дальше не будет
Ну и k, соответственно, с 2 до (i/2)
var 
	n,i,k: integer;
	flagSimple: boolean;
begin
	writeln('Введите натуральное число: ');
	readln(n);
	for i:=2 to (n/2) do 
	begin
		if n mod i = 0 then 
		begin
			flagSimple := true;		//считаем пока, что i - простое (ну или count := 0, если использовать число)
			for k:=2 to (i/2) do
				if (i mod k = 0) then
				begin
					flagSimple := false;
					break;		//выходим из цикла for для k, так как обнаружили, что i - не простое
				end;
			if (flagSimple = true) then
				writeln(i, ' ');
		end;
	end;
						
end.
Ответ написан
Комментировать
tsarevfs
@tsarevfs
C++ developer
var n, i, k, count: integer;
begin
writeln('Введите натуральное число: ');
readln(n);
count := 0;
for i := 2 to n - 1 do begin
    if n mod i = 0 then begin
        for k := 1 to i - 1 do // ищем делители делителя
            if (i mod k = 0) then begin //нашли очередной
                count += 1; //увеличили счетчик (и да, для 2 делителя начинать будем уже не с 0)
                if count <= 2 then //и сразу очень странная проверка 
                                   //мы не закончили поиск, значение счетчика не окончательное
                                   //да и почему 2, поиск то до i - 1
                    writeln(i, ' ');
            end;
    end;
end;

end.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы