#1 17.04.08 00:24
Задачка для программеров и математиков (Язык СИ, задачка внутри)
Помогите написать условие отбора простых чисел.Имееьтся целое число b в отрезке от m до n.
Я пыталась задать условие с помощью цикла ""for(i=2; i=b-1; i++ ) if (b%i!=0)"" и дальше по проге)) Так вот. Отбор гонит)) Точнее гоню я,но легче от этого не становится.Еще при таком отборе, даже чисто логически можно найти простой косяк: возьмем число 6. Оно не простое потому, что делится на 2 и 3.Но цикл добавляет его в простое число потому,что делит его на пять и находит остаток. Вот))))
Offline
#2 17.04.08 14:27
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
если так, простым перебором всех возможных множителей, то нужно просто проследить, чтобы не делилось ни на одно из чисел. У тебя, видимо, если хоть на какое-то не делится, то считается простым. А вообще, есть же прописанные таблицы простых чисел, ими официально все пользуются, или надо обязательно таким способом?
А ещё лучше это на programming переместить, сюда многие, кто там бывает, вообще наверно не заглядывают
Offline
#3 17.04.08 15:44
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
иди от обратного....простое число делится без остатка только на себя и на единицу.....ну и ставь проверку : если делится без остатка хотя бы на одно число из (2<=x<=n-1) где n текущее число, значит число не простое.
Offline
#4 17.04.08 15:46
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
^$h@''rK# :), ну так она так и делает, только не совсем правильно
Offline
#5 17.04.08 15:50
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
for(i=2; i=b-1; i++ )
{
if (b%i==0)
{
break; // число не простое
}
}
Kosh_Mar, она делает не так а наоборот
Offline
#6 17.04.08 16:01
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
^$h@''rK# :), я об этом и говорю. Только
^$h@\'\'rK# :) написал(а):
i=b-1
наверно надо с двойным "="
Offline
#7 17.04.08 16:56
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
ну это детали ))
Offline
#8 17.04.08 21:25
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
все равно не работает.Я уже пробовала.
Offline
#9 18.04.08 00:19
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
ну давай сюда код
Offline
#10 18.04.08 00:19
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
Kosh_Mar написал(а):
наверно надо с двойным "="
чета я наверно си подзабыл, но надо условие типа <= или <
поставь i < b, и по логике как у ^$h@''rK# :) должно работать
если нет, то заведи переменную, обнули и в теле при выполнении условия непростого числа присвой ей 1
дальше проверь переменную и будет счастье
вообще решение там должно быть простое.. чет туплю сам тоже :(
Offline
#11 18.04.08 01:05
#12 18.04.08 09:31
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
GreenDay, конечно <= или != на крайний случай (ну если там b-1). Вообще блин туплю )
Offline
#13 18.04.08 16:31
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
да простейшая задачка....тут даже думать не надо ))
Не работает потому что во первых это не вся программа а только вложенный цикл а во вторых у тебя в условиях синтаксическая ошибка ...
Offline
#14 18.04.08 17:46
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
Кстати проверку на делимость делай с числами от 2 и до sqrt(n) или как оно там в си пишется... Дальше то проверять нету смысла
Offline
#15 19.04.08 00:54
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
GreenDay, так тоже делала.Он лишние значения пишет.Я уже все,что могла перепробовала)))Я ж не совсем блондинко. там услоавие я написала так: цикл от 2 до b-1,остаток от целого деления. если он не равен нулю,то переменной добавляю значение(левая какая-нибудь переменная) 1(изначально она=0),Потом если переменная осталась равна нулю,то b добавляем в сумму так,как оно простое. На словах все правильно,а при написании он приписывает лишние значения.
Исправлено SeXy 82 WoMaN (19.04.08 00:55)
Offline
#16 19.04.08 14:01
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
на вот это попробуй - решение "в лоб":
Код: С:
#include "stdafx.h"
void main()
{
printf("Enter interval [m;n]: ");// запрос ввода интервала
int m = 0,n = 0; // границы интервала
scanf_s("%d %d",&m,&n); // чтение границ
if(m>n) return; // если левое больше, чем правое - выход
int* mas = new int[n-m]; // динамический массив целых под найденные числа
int k = 0; // счётчик найденных чисел
int cnt = 0; // счётчик делимостей
if(m == 1) printf("\t%d\n", mas[k++] = m); // включить 1, если нужно
for(int i = m; i<=n; i++) // i - число для анализа
{
for(int j = 1; j < i; j++) // начнём анализ
if( !(i%j) ) cnt++; // если делится без остатка, то прибавить счётчик делимостей
if(cnt == 1) // если делимость одна(только на единицу)
printf("\t%d\n", mas[k++] = i); // то записать найденное число в массив
cnt = 0; // и занулить счётчик для следующей итерации
}
}Исправлено kvazimodo (19.04.08 18:26)
Offline
#17 19.04.08 18:05
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
это слишком умно для моего уровня программирования,если честно. можешь объяснить, что к чему?
Offline
#18 19.04.08 18:29
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
я код поправил немного... можно ещё поправить. ну и вопросы задавай, чего не понятно?
постарался всё закомментить
еще можно модернизировать код, начиная анализ не с единицы, а с двойки... тогда
условие
Код: С:
if(cnt == 1)
нужно заменить на
Код: С:
if(cnt == 0)
ну и размер динамического массива можно уменьшить
Исправлено kvazimodo (19.04.08 18:31)
Offline
#19 19.04.08 18:37
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
просто я синтаксис си++ плохо понимаю. и то, что ты пишешь мне пока лохо понятно. во-первых, я плохо понимаю что такое динамический массив,что такое "cnt".
Offline
#20 19.04.08 18:45
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
Код: С:
int cnt = 0; // счётчик делимостей
это целое число, которое говорит о том, на сколько чисел из интервала [2,N-1] делится без остатка число N
то есть, если число не делится без остатка ни на одно число из этого интервала, то оно простое
Исправлено kvazimodo (19.04.08 18:45)
Offline
#21 19.04.08 18:47
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
так по сути я так и делала. за исключением сложности твой вариант тоже самое.Или я чего-то не догоняю?
Offline
#22 19.04.08 18:48
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
Код: С:
int* mas = new int[n-m]; // динамический массив целых под найденные числа
динамический массив - это массив, память под который выделяется в ходе выполнения программы.
это нужно в тех случаях, когда, например, заранее неизвестна размерность данных
Offline
#23 19.04.08 18:49
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
я вроде понимаю что тут к чему,но блин...меня условие отбора что-то напрягает.
Offline
#24 19.04.08 18:50
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
извини,что так достаю, просто после двух недель яростного закрывания хвостов мозг отрубает(
Offline
#25 19.04.08 18:52
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
Код: С:
for(int i = m; i<=n; i++)
{
for(int j = 2; j < i; j++)
if( i%j == 0 ) cnt++; // если остаток от деления равен 0 ...
if(cnt == 0)
{
mas[k] = i; // записать в массив найденных чисел
printf("\t%d\n", mas[k]); // вывести на экран
k++; // увеличить счётчик найденных чисел
}
cnt = 0; // занулить счётчик делимостей ...
}так понятнее должно быть
Offline
#26 19.04.08 18:57
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
да так понятнее,ты прав. спасибо.
Offline
#27 19.04.08 19:00
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
не за что - мне не сложно!
Offline
#28 19.04.08 19:03
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
просто уже весь мозг сломала в поисках косяка)))
Offline
#29 19.04.08 19:05
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
а зачем int в цикле?
Offline
#30 19.04.08 19:11
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
просто привычка :) можешь переменную определить до цикла безо всяких проблем...
Offline
#31 19.04.08 19:14
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
А,ну тада понятно. Просто я паскаль хорошо знаю,а вот си я только недавно начала и поэтому мне тяжело перестроиться.Не понимаю я этого синтаксиса)))
Offline
#32 21.04.08 10:25
#33 22.04.08 19:02
Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)
_kos, ага, типа больше проостых делителей нет... Еще есть 23,31 и т.д. Это так, к слову...
Offline

