Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2009, 17:54   #1
Серафимий Долговяз
Пользователь
 
Регистрация: 24.01.2009
Сообщений: 18
Восклицание Задача с функцией

Программа.Условие: Написать функцию(логического типа), которая будет проверять простое число или нет.Число задается с экрана
Серафимий Долговяз вне форума Ответить с цитированием
Старый 04.02.2009, 18:41   #2
1..2,1..2 :)
Заблокирован
 
Регистрация: 04.01.2009
Сообщений: 11
По умолчанию

Лови и отзыв не забудь:

function prost(p:integer):boolean;
var
i,k:integer;
begin
if p=2
then prost:=true
else if p mod 2<>0
then begin
i:=3;
k:=0;
while i<= trunc(sqrt(p)) do
begin
if p mod i=0
then inc(k);
i:=i+2;
end;
if k=0
then prost:=true
end;
end;
var
o:boolean;
m:integer;
begin
readln(m);
if prost(m)=true
then writeln('prostoe')
else writeln('ne prostoe');
readln;
end.
1..2,1..2 :) вне форума Ответить с цитированием
Старый 04.02.2009, 19:11   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Что-то наворочено как-то.
Код:
uses crt;
function Prost(n:longint):boolean;
var i:longint;
begin
for i:=2 to round(sqrt(n)) do
if n mod i=0 then Prost:=false;
end;
var k:longint;
begin
clrscr;
write('Vvedite chislo k=');
readln(k);
write(Prost(k));
readln
end.
puporev вне форума Ответить с цитированием
Старый 04.02.2009, 19:29   #4
1..2,1..2 :)
Заблокирован
 
Регистрация: 04.01.2009
Сообщений: 11
По умолчанию

puporev обрати внимание я первый , а во вторых решение твоё полетело у меня с значениями :2,101,4.
Может это мой компилер ... А так согласен коротко
1..2,1..2 :) вне форума Ответить с цитированием
Старый 04.02.2009, 19:39   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
а во вторых решение твоё полетело у меня с значениями :2,101,4.
А вот у меня не полетело. 2 и 101 TRUE; 4 - FALSE
puporev вне форума Ответить с цитированием
Старый 04.02.2009, 19:54   #6
Викдон
Форумчанин
 
Аватар для Викдон
 
Регистрация: 11.11.2008
Сообщений: 161
По умолчанию

а зачем нужно round(sqrt(n)) ?
может просто:
Код:
var k:longint;
 Function Pr(t:longint):boolean;
  var i:longint;
  begin
    for i:=2 to t-1 do
     if (t mod i=0)  then
      begin
       Pr:=false;
       exit;
      end;
   Pr:=true;
  end;

begin
write('Введите число');
readln(k);
write(Pr(k));
readln;
end.
Викдон вне форума Ответить с цитированием
Старый 05.02.2009, 00:22   #7
1..2,1..2 :)
Заблокирован
 
Регистрация: 04.01.2009
Сообщений: 11
По умолчанию

Потому что решение сокращается более чем в 2 раза
Из математики известно что число не простое если делится на лю бое число диапозона от 2 до корня из числа или ёще проще до 9!
1..2,1..2 :) вне форума Ответить с цитированием
Старый 05.02.2009, 08:09   #8
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
а зачем нужно round(sqrt(n)) ?
Просто если число имеет делители меньшие корня из этого числа, то оно имеет делители, домножающие первые до этого числа и нет смысла их проверять. Если не имеет делителей меньших корня, то не имеет делителей и больше корня, опять же нет смысла проверять. Делители всегда парные.
puporev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите с функцией 1234 Общие вопросы Delphi 5 30.08.2008 10:55
Помогите с функцией Родион Общие вопросы Delphi 3 08.05.2008 19:18
помогите с функцией CopyFile vizor9 Свободное общение 16 16.06.2007 20:13
Глюк с функцией PolyBezier Kuzya Общие вопросы Delphi 1 02.06.2007 01:50
помогите с функцией zetrix Microsoft Office Excel 0 31.10.2006 07:32