[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Пища для ума)))
Гость_Chel
есть цикл нахождения простых чисел(3,5,7 и т.д. т.е. те которые делятся на себя и на 1)

for(i=2;i<1000;i++)
for(j=2;j<=(i/j);j++)
{
if !(i%j) break;// Если у числа i есть множители, то это не простое число выходим
count << i;//просто вывод простого числа
}


Вопрос почему во втором цикле берется ограничение j<=(i/j)? smile.gif)



Спустя 22 минуты, 51 секунда (26.11.2009 - 11:32) Michael написал(а):
Очень верное ограничение.
Просто если j станет равно i/j , то умножив получим j*множитель = j*(i/j) = i.
Дальнейший перебор не нужен, т.к. будут получаться числа больше i.

Спустя 14 минут, 18 секунд (26.11.2009 - 11:46) Гость_chel написал(а):
smile.gif) не осознал ход ваших мыслей Michael smile.gif...

Спустя 13 минут, 8 секунд (26.11.2009 - 11:59) Michael написал(а):
Может не сильно хорошо объяснил раньше . smile.gif
Например перебираем k =1 ... (i/j) .....

Если ни одно число из Xi = (1 ... (i/j)) не является множителем для i, то
следующие числа Yi =((i/j)+1, ...) ими уж точно не станут т.к им чтобы стать множителем для i необходима пара из Xi которой нет .



Спустя 7 минут, 7 секунд (26.11.2009 - 12:06) Гость_chel написал(а):
теперь осознал....чашечка кофе Nescafe делает свое дело:)))

Спустя 15 минут, 31 секунда (26.11.2009 - 12:22) Michael написал(а):
Кстати, я бы алгоритм переписал, примерно так:
for(i=3;i<1000;i++)
{
isSimple = true;
for(j=2;j<=(i/j);j++)
{
if (!(i%j) )
{
isSimple = false;
break;// Если у числа i есть множители, то это не простое число выходим
}

}

if (isSimple) count << i;//просто вывод простого числа
}


, а число 2 и так простое, сразу его можно в результат.

Спустя 22 минуты, 39 секунд (26.11.2009 - 12:45) Гость_chel написал(а):
Ну если на то пошло то любое простое число больше 3 можно представить как y=6k(+-)1 и можно переписать алгоритм на основании этой формулы)))
не ну порой всякая фигня отнимает столько времени)))...и как заноза...пока не докапаешься не отстанет)

Спустя 13 минут, 6 секунд (26.11.2009 - 12:58) Michael написал(а):
Я говорил в основном про то, чтобы
вынести вывод простых чисел count << i; за внутренний цикл,
потому что ему там не место.

Спустя 23 минуты, 34 секунды (26.11.2009 - 13:21) Гость_chel написал(а):
а ну это я накосячил:)) когда писал) там еще cout вместо count...у меня такое бывает))

Спустя 20 часов, 27 минут, 38 секунд (27.11.2009 - 09:49) Гость_chel написал(а):
Хммм...сегодня с утра осенило, всетаки как в моем понимании можно объяснить
"Вопрос почему во втором цикле берется ограничение j<=(i/j)?"...Лучшний способ это конечно на примере...smile.gif

Допустим есть некое число N, мы его хотим проверить является ли оно простым(т.е. делится на себя и 1).
Для этого мы делим число N на числа j, которое принадлежит множеству чисел от 2 до N-1 и смотрим есть ли остаток от деления, если его нет, то естественно число не является простым.
Теперь присмотримся к последовательности чисел из множества
2,3,4,5,6...N
у нас есть формула N/j=А(целая часть), по началу число А будет принадлежать множеству (j..N), но в какой то момент число А будет принадлежать множеству чисел(2..j), НО т.к. числа из диапазона (2..j) уже проверялись и они не делят число N на цело, то можно сделать вывод что любое j которое больше (N/j) не может делить число N нацело и собственно не является его множителем, поэтому проверять числа при которых не выполняется условие j<=N/j нет смысла...
ну как то так...smile.gif))

Спустя 3 минуты, 33 секунды (27.11.2009 - 09:52) Guest написал(а):
и хотя вышесказанное по сути явлется тем же самым что и(то что было сказано Michael ):
Цитата
"Например перебираем k =1 ... (i/j) .....

Если ни одно число из Xi = (1 ... (i/j)) не является множителем для i, то
следующие числа Yi =((i/j)+1, ...) ими уж точно не станут т.к им чтобы стать множителем для i необходима пара из Xi которой нет ."


Но мне кажется что так не совсем понятно...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.