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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2012, 14:13   #1
mobydick
Пользователь
 
Регистрация: 18.10.2012
Сообщений: 13
По умолчанию Рекурсия. Простое число

нужно сделать программу на СИ, в которой с помощью рекурсивной функции
определяется является ли число которое мы ввели простым. вот мой код:
Код:
#include <stdio.h>
int main()
{
    int s;
    printf("enter your number: "); scanf("%i",&s);
    printf("your number is prime",prost(s));
    return 0;
}
int prost(int s)
{
    if ((s/s)==1) return s; else return (s / (prost(s)));
}
но я так подозревая, что есть ошибка в алгоритме, потому как любое число что не ввести - является простым. помогите разобраться.
mobydick вне форума Ответить с цитированием
Старый 02.12.2012, 15:34   #2
Ezhuk
Форумчанин
 
Регистрация: 09.10.2010
Сообщений: 217
По умолчанию

s/s всегда = 1.

Вроде как-то так должна выглядит данная рекурсия
Код:
bool fun ( int num, int del=2){
	if(del > num/2)
		return true;
	return num%del ? fun(num,++del) : false;
}
Ёж птица гордая, пока не пнешь не полетит.
Ezhuk вне форума Ответить с цитированием
Старый 02.12.2012, 18:33   #3
mobydick
Пользователь
 
Регистрация: 18.10.2012
Сообщений: 13
По умолчанию

Код:
#include <stdio.h>
int main()
{
    int num,del;
    printf("enter your number: "); scanf("%i",&num);
    printf("your number is prime",prost(num,del));
    return 0;
}
bool fun(int num, int del=2){
	if(del > num/2)
		return true;
	 return num%del ? fun(num,++del) : false;
}
такой код даже компилировать не хочет, пишет ошибка в 9 строке
mobydick вне форума Ответить с цитированием
Старый 02.12.2012, 19:10   #4
Ezhuk
Форумчанин
 
Регистрация: 09.10.2010
Сообщений: 217
По умолчанию

Даже не удивляюсь, что такой код компилируется...
Проверь следующее:
1) Название функции
2) Объявление функции
3) del не инициализирована, да и она в мейне не нужна
Ёж птица гордая, пока не пнешь не полетит.
Ezhuk вне форума Ответить с цитированием
Старый 02.12.2012, 19:29   #5
mobydick
Пользователь
 
Регистрация: 18.10.2012
Сообщений: 13
По умолчанию

Код:
#include <stdio.h>
bool fun(int num, int del=2)
int main()
{
    int num;
    printf("enter your number: "); scanf("%i",&num);
    if (fun) printf("your number is prime");
    else printf("you number is'nt prime");
    return 0;
}
bool fun(int num, int del=2){
	if(del > num/2) return true;
	 return num%del ? fun(num,++del) : false;
}
все равно ругается на функцию fun
mobydick вне форума Ответить с цитированием
Старый 03.12.2012, 20:09   #6
St.Voland
 
Регистрация: 03.12.2012
Сообщений: 4
По умолчанию

перед main точку с запятой поставь)
и в самом определении функции( после main ) пиши просто del. Тогда у тебя по автомату del = 2, но ты определяешь функцию для переменной del. Тебе вроде это и нужно))
St.Voland вне форума Ответить с цитированием
Старый 03.12.2012, 21:22   #7
mobydick
Пользователь
 
Регистрация: 18.10.2012
Сообщений: 13
По умолчанию

Код:
#include <stdio.h>
bool fun(int num, int del);
int main()
{
    int num,del;
    printf("enter your number: "); scanf("%i",&num);
    if (fun(num,del)) printf("your number is prime");
    else printf("you number is'nt prime");
    return 0;
}
bool fun(int num, int del){
	if(del > num/2) return true;
	 return num%del ? fun(num,++del) : false;
}
все равно пишет ошибку, что отсутствует какой то знак перед fun.
где ошибка?
mobydick вне форума Ответить с цитированием
Старый 05.12.2012, 00:47   #8
St.Voland
 
Регистрация: 03.12.2012
Сообщений: 4
По умолчанию

Цитата:
Сообщение от mobydick Посмотреть сообщение
Код:
#include <stdio.h>
bool fun(int num, int del);
int main()
{
    int num,del;
    printf("enter your number: "); scanf("%i",&num);
    if (fun(num,del)) printf("your number is prime");
    else printf("you number is'nt prime");
    return 0;
}
bool fun(int num, int del){
	if(del > num/2) return true;
	 return num%del ? fun(num,++del) : false;
}
все равно пишет ошибку, что отсутствует какой то знак перед fun.
где ошибка?

Давай разложим все по полочкам)))
Зачем до этого было написано bool fun(int num, int del = 2); ?!?
Чтобы твоя функция могла работать и как функция от одной переменной : 2й параметр опускался и принимался равным 2м. Если принять эту концепцию программки, то в твой main должен выглядеть как-то так:

int main()
{
int num;
printf("enter your number: "); scanf("%i",&num);
if (fun(num)) printf("your number is prime");
else printf("you number is'nt prime");
return 0;
}

Еще раз: когда ты пишешь fun(num), это по сути эквивалентно fun(num, 2). Далее, когда ты уже пишешь что твоя функция fun делает(после main), тебе нужно описать ее как функцию от двух переменных bool fun(int num, int del), а не bool fun(int num, int del = 2). В общем, как у тебя))
Но, по правде говоря можешь не заморачиваться в этих деталях и поменять в своей программе main:
int main()
{
int num;
printf("enter your number: "); scanf("%i",&num);
if (fun(num, 2)) printf("your number is prime");
else printf("you number is'nt prime");
return 0;
}
St.Voland вне форума Ответить с цитированием
Старый 17.04.2017, 13:46   #9
Uriy42
Новичок
Джуниор
 
Регистрация: 13.04.2017
Сообщений: 1
По умолчанию ТЕСТ ПРОСТОТЫ ЧИСЛА

Я закончил институт в1965г и знаний по программированию у меня не больше, чем волос на чайнике.Может быть найдется специалист, у которого появится интерес к оценке практической пользы предлагаемого теста простоты числа.Я смог проверить его только вручную.
((N+1)/6-n)/(6n-1)=k или
((N-1)/6-n)/(6n+1)=k и,одновременно ((N-1)/6+n)/(6n-1)=k
N.n.k-натуральные числа.(N+1)/6,(N-1)/6-целые числа.
Число N является простым, если равенство не выполняется при любом n и целом k.Тесты являются следствием из формул для расчета составных чисел. M=6(k(6n-1)+n)-1.M=6(k(6n+1)+n)+1,M=6(k(6n-1)-n)+1.Возможно дублирование чисел M при различных сочетаниях k и n.Формулы получены
из анализа выражений 6n-1 и 6n+1.характеризующих множество нечетных чисел не кратных 3.Благодарю.Климов Юрий Федорович.
Подробнее:EASTERN UROPEAN SAIENTIFIC JOURNAL june №3 2015г с169
http//www.aris-verlag.de/index.html по ссылке journal и далее EESJ
Uriy42 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
простое число Kukurudza Общие вопросы C/C++ 2 13.09.2011 14:43
простое и составное число. Alt_Shift Общие вопросы C/C++ 6 14.11.2010 11:05
число простое или составное isus Помощь студентам 9 18.12.2009 00:35
Почему размер хэш-таблицы обязательно простое число? Zefick Помощь студентам 4 25.12.2008 13:42
Определить n-ое число Фибоначчи - Рекурсия Xeon332 Помощь студентам 3 09.01.2008 19:01