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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2009, 22:49   #1
isus
Пользователь
 
Регистрация: 07.06.2009
Сообщений: 41
По умолчанию число простое или составное

как ето можно сделать? просто я 1 вариант предложил преподу ему непонравилось.
isus вне форума Ответить с цитированием
Старый 17.12.2009, 23:40   #2
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Держи:
Код:
program zad1;
var
n:integer;

begin
writeln('введите число');
readln(n);
if (n=2) or (n=3) then writeln('число простое')
else
if  (n mod 2 = 0) or (n mod 3=0) then
writeln('число составное')
else
writeln('простое');
end.
думаю алгоритм моего решения ясен?
если что сразу поясню:
Любое составное число делится на 2 или 3 без остатка, но так как сами эти числа (2 и 3) являются простыми я добавил:
Код:
if (n=2) or (n=3) then writeln('число простое')
else

Последний раз редактировалось Базиля; 17.12.2009 в 23:43.
Базиля вне форума Ответить с цитированием
Старый 17.12.2009, 23:45   #3
Kopwyh
НашКодинг
 
Регистрация: 21.05.2009
Сообщений: 9
По умолчанию

Не знаю какой вариант ты ему предлагал.
1. Перебрать все числа, вплоть до корня из него и поделить с остатком (в си операция выглядит как %, в бейсике и паскале как MOD)
2. Как вариант, забить таблицу простых чисел и прогнать такую же проверку на них.
3. Предложи преподу реализовать Решето Эрастосфена, или http://ru.wikipedia.org/wiki/%D0%A0%...B8%D0%BD%D0%B0
(там, кстати и код есть )
Kopwyh вне форума Ответить с цитированием
Старый 17.12.2009, 23:49   #4
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

Цитата:
Любое составное число делится на 2 или 3 без остатка, но так как сами эти числа (2 и 3) являются простыми я добавил:
Нет.
49 - составное число, равное произведению 7 * 7, где 7 - простое число.
на 2 и 3 49 не делится
чтобы определить простое число X или нет, нужно проверить делимость этого числа на числа, начиная с 2 до корень квадратный из X. Если найдется такое число из промежутка [2; sqrt(X)], на которое X делится без остатка, то X - составное, иначе - простое.
это вот так записывается (это для натуральных чисел; отрицательные числа - не простые по определению натурального числа):
Код:
{ Возвращает TRUE если число простое }
function PrimeNumber(X: Longint): Boolean;
var
  I: Integer;
  F: Boolean;
begin
  F := True;
  for I := 2 to Trunc(Sqrt(X)) do
    if X mod I = 0 then
    begin
      F := False;
      Break;
    end;
  PrimeNumber := F and (X <> 1);
end;

Последний раз редактировалось Alex_FF; 17.12.2009 в 23:53.
Alex_FF вне форума Ответить с цитированием
Старый 17.12.2009, 23:53   #5
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Цитата:
Нет.
49 - составное число, равное произведению 7 * 7, где 7 - простое число.
на 2 и 3 49 не делится
Если только это число то можно еще одно условие добавить и все))
Ну да ладно, не рационально получается
Базиля вне форума Ответить с цитированием
Старый 17.12.2009, 23:57   #6
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

Цитата:
Сообщение от Базиля Посмотреть сообщение
Если только это число то можно еще одно условие добавить и все))
Ну да ладно, не рационально получается
нет, не только. Простые числа составляют бесконечное множество, это еще Евклид доказал.
Произведение любых нескольких простых чисел - число составное.
Например, 65537 - простое число, 17 - тоже простое, 1114129 = 65537 * 17 - составное число.
Alex_FF вне форума Ответить с цитированием
Старый 18.12.2009, 00:04   #7
isus
Пользователь
 
Регистрация: 07.06.2009
Сообщений: 41
По умолчанию

всем спасибо я сделал так! что скажите?
r-вводим

int t=0,k=0;

for( int i=2; i<=r; i++){
if(r%i==0 && r/i==1){

t++;
break;
}
if(r%i==0 && r/i!=1){

k++;
break;
}
}
if(t==1 && k==0){printf("простое\n");}
else{printf("составное\n");}
isus вне форума Ответить с цитированием
Старый 18.12.2009, 00:11   #8
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

isus
я СИ не знаю( И почему нельзя было сразу в первом посте написать, что делать нужно на СИ?
Базиля вне форума Ответить с цитированием
Старый 18.12.2009, 00:32   #9
isus
Пользователь
 
Регистрация: 07.06.2009
Сообщений: 41
По умолчанию

Бразилия...я же непросил делать я просил подать идею)
isus вне форума Ответить с цитированием
Старый 18.12.2009, 00:35   #10
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
Радость

Цитата:
Сообщение от isus Посмотреть сообщение
всем спасибо я сделал так! что скажите?
r-вводим

int t=0,k=0;

for( int i=2; i<=r; i++){
if(r%i==0 && r/i==1){

t++;
break;
}
if(r%i==0 && r/i!=1){

k++;
break;
}
}
if(t==1 && k==0){printf("простое\n");}
else{printf("составное\n");}
это плохой алгоритм. Нужно проверять числа от двух, до КОРЕНЬ КВАДРАТНЫЙ ИЗ r.

Код:
bool PrimeNumber(long x)
{
	 bool f = true;
	 for (int i = 2; i < floor(sqrt((double)x)); i++)
		  if (x % i == 0)
		  {
			  f = false;
			  break;
		  }
	 return (f && (x != 1));
}
Alex_FF вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простое любопытство.... KORT Свободное общение 130 20.06.2009 19:06
Почему размер хэш-таблицы обязательно простое число? Zefick Помощь студентам 4 25.12.2008 13:42
Оператор амперсанд "&" или число внутри текста dotvz Microsoft Office Excel 2 02.04.2008 14:33
взаимно простое числы Cantana Помощь студентам 4 07.03.2008 08:46