Официальный сайт студ.городка НГТУ
Учеба » Задачка для программеров и математиков (Язык СИ, задачка внутри) 

#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

Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)

нужно ставить i<b

Offline

#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

Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)

Блин, народ в библиотеке math.h должна быть функция определения наибольшего простого числа до заданного значения.
Вы что?
Или проверяйте делимость на 2, 3, 5 - зачем дальше то?!
Блин.

Offline

#33  22.04.08 19:02

Re: Задачка для программеров и математиков (Язык СИ, задачка внутри)

_kos, ага, типа больше проостых делителей нет... Еще есть 23,31 и т.д. Это так, к слову...

Offline

Учеба » Задачка для программеров и математиков (Язык СИ, задачка внутри) 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.797 сек.
Выполнено 11 запросов.