25.02.2012, 18:37 | #1 (permalink) |
Новичок
Регистрация: 25.02.2012
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Помогите разобраться
Дано натуральное число N. Необходимо разложить его на простые множители. Формат входных данных Во входном файле записано число N (2 \le N \le 100000). Формат выходных данных В выходной файл выведите искомые простые множители в порядке возрастания. Примеры: Вход 12 Выход 2 2 3 Вход 1030 Выход 2 5 103 Вот мое решение. Я уверена, что здесь есть недочеты. Помогите исправить. var m, n, i :integer; f,g:text; Begin assign(f,'input.txt'); assign(g,'output.txt'); reset(f); rewrite(g); readln(f,n); i:=2; m:=n; while(i<=n) do begin if m mod i = 0 then begin write(g,i); m:=m div i; end else inc(i); end; close(f); close(g); End. |
25.02.2012, 18:37 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Данные топики имеют сходства с вашим, рекомендую прочитать Помогите разобраться Помогите разобраться |
25.02.2012, 19:19 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
write(g,i); следует написать write(g,i,' '); то есть после каждого записанного в выходной файл числа ставить пробел, чтобы множители не сливались. А вообще, если сами придумали - умница! Я бы начал с того, чтобы каким-нибудь решетом Эратосфена либо еще как-нибудь составил массив простых чисел, не превышающих половину исходного, а затем проверял бы на делимость. А у Вас - ну просто красотища, а не решение! Браво! Единственно только еще замечание. Каким Паскалем Вы пользуетесь? Если ABC, то всё правильно, а вот если Turbo, Borland или Free, то для m и n формат Integer не подходит, нужно LongInt, раз уж диапазон доходит до 100000 (в Integer верхний предел - 32000 с копейками). |
|
25.02.2012, 21:03 | #3 (permalink) |
Новичок
Регистрация: 25.02.2012
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Спасибо, что уделили внимание Владимир. Поправку вашу учла, спасибо, что подсказали. Я пользуюсь Паскалем ABC.
У меня еще один вопрос. Опять задачка дана. Дано натуральное число N. Определить, является ли оно квадратом простого числа. Формат входных данных Во входном файле записано N (N <= 100000). Формат выходных данных Вывести в выходной файл Yes, если N - квадрат простого и No в обратном случае. Примеры: Вход 2 Выход No Вход 9 Выход Yes Вот моя программа. var n:integer;b:real; f,g:text; Begin assign(f,'input.txt'); assign(g,'output.txt'); reset(f); rewrite(g); readln(f,n); if (n>=0) then begin b:=sqrt(n); if (b-Round(b)=0) then write(g,'Yes') else write(g,'No'); end else write(g,'No'); close(f); close(g); End. Здесь что-то опять не так. А что не могу понять. Буду признательна. |
25.02.2012, 21:45 | #4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ну, прежде всего, "не так" то, что Вы решаете не совсем ту задачу, а точнее задачу, существенно упрощенную: вместо проверки на то, что корень является простым числом, Вы делаете проверку на то, что он является числом целым.
|
25.02.2012, 23:39 | #5 (permalink) |
Новичок
Регистрация: 25.02.2012
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
26.02.2012, 10:35 | #6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Например, так:
Код:
var n,i,m:integer; b:real; f,g:text; Begin assign(f,'input.txt'); assign(g,'output.txt'); reset(f); rewrite(g); readln(f,n); if (n>3) then begin b:=sqrt(n); if (b-Round(b)=0) then begin i:=1; repeat Inc(i); m:=Round(b) mod i; until m=0; If i=Round(b) then write(g,'Yes') else write(g,'No'); end else write(g,'No'); end else write(g,'No'); close(f); close(g); End. if (n>=0) then поставлено if (n>3) then Это важно: иначе при вводе 1, 2 или 3 возникнет ошибка зацикливания. |
26.02.2012, 18:15 | #7 (permalink) |
Новичок
Регистрация: 25.02.2012
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Спасибо еще раз. Разобралась я в задаче. Теперь всё правильно.
Вчера вечером сидела голову ломала еще над одной задачей. Рекуррентные соотношения. Вроде простая задача, но что-то опять не правильно. На каждом следующем дне рождения Винни Пух съедает столько же меда, что и на двух предыдущих. На двух первых днях рождения у Пяточка и у Кролика он съел по 100 г меда. Написать программу, определяющую, сколько килограммов меда съест Винни Пух на N-ом дне рождения. Формат входных данных Во входном файле задано единственное число N (1 \le N \le 40). Формат выходных данных Выведите, сколько килограммов меда съест Винни Пух на этот день рождения с точностью до одного знака после десятичной точки. Примеры: Вход 1 Выход 0.1 Вход 4 Выход 0.3 Вот мое решение. var a, b, c, k:real; n,d:integer; f,g:text; Begin assign(f,'input.txt'); assign(g,'output.txt'); reset(f); rewrite(g); readln(f,n); a:=0.1; b:=0.1; for d:=3 to n do Begin c:=a+b; a:=b; b:=c end; k:=c; writeln (g, k); close(f); close(g); End. |
26.02.2012, 20:29 | #8 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
И что не устраивает? На взгляд, всё правильно. Единственно - переменную k можно не вводить, а прямо вывести с, ну да это так, косметика.
|
27.02.2012, 09:55 | #10 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|