Делаю задание, в котором надо написать функцию, которая проверяет является ли данное число простым (простое число- число которое делится без остатка только на себя и 1. 7, 11 и тд.)
Правильно ли организаван цикл проверки? И какого то условия не хватает?
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
int Proverka(int num)
{
if (num/num != 1)
if (num != num/1)
return printf("%d\n Число простое\n",num);
else
return printf("\n Error");
}
int main()
{
clrscr();
int My_num;
cout << "Введите любое число от 1 до бесконечности \n";
cout << "My_num= ";
cin >> My_num;
Proverka(My_num);
return 0;
}
Здравствуйте, Deposit, Вы писали:
D>Делаю задание, в котором надо написать функцию, которая проверяет является ли данное число простым (простое число- число которое делится без остатка только на себя и 1. 7, 11 и тд.) D>Правильно ли организаван цикл проверки? И какого то условия не хватает?
Я там цикла не увидел...
Здравствуйте, Deposit, Вы писали:
D>Делаю задание, в котором надо написать функцию, которая проверяет является ли данное число простым (простое число- число которое делится без остатка только на себя и 1. 7, 11 и тд.) D>Правильно ли организаван цикл проверки? И какого то условия не хватает?
D>
D>if (num/num != 1)
D>if (num != num/1)
D>
Эээ... а где тут цикл? Эти два условия будут всегда неверны: x / x == 1 и x == x / 1 для любых целых чисел
Здравствуйте, Deposit, Вы писали:
D>Делаю задание, в котором надо написать функцию, которая проверяет является ли данное число простым (простое число- число которое делится без остатка только на себя и 1. 7, 11 и тд.) D>Правильно ли организаван цикл проверки?
Что-то я не вижу никакого цикла в приведенном коде...
D>И какого то условия не хватает?
D>
т.е. условие всегда будет давать false.
Второе: вопрос на засыпку: к какому if относится else в функции Proverka?
Третье: какой собственно алгоритм предпологается использовать для проверки простоты?
ЗЫ
Любое число делится на себя и на еденицу без остатка...
Здравствуйте, Deposit, Вы писали:
D>Делаю задание, в котором надо написать функцию, которая проверяет является ли данное число простым (простое число- число которое делится без остатка только на себя и 1. 7, 11 и тд.) D>Правильно ли организаван цикл проверки? И какого то условия не хватает?
Давай понамекаю
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
// Есть ли смысл возвращать int (тем более не результат проверки, а
// результат вызова printf? К тому же, зачем printf когда ниже
// используется count/cin
// Предлагаю так:bool is_prime(int value);
int Proverka(int num)
{
// Как уже сказали, цикла тут не видно. Самый простой вариант - цикл от 2 до num
// и подсчет количества делителей. Небольшая оптимизация - цикл от 2 и до
// кадратного корня из num и опять же подсчет делителй.if (num/num != 1)
if (num != num/1)
return printf("%d\n Число простое\n",num);
else
return printf("\n Error");
}
int main()
{
clrscr();
int My_num;
cout << "Введите любое число от 1 до бесконечности \n";
cout << "My_num= ";
cin >> My_num;
Proverka(My_num);
return 0;
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
HgLab: Mercurial Server and Repository Management for Windows
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, Deposit, Вы писали:
D>>Делаю задание, в котором надо написать функцию, которая проверяет является ли данное число простым (простое число- число которое делится без остатка только на себя и 1. 7, 11 и тд.) D>>Правильно ли организаван цикл проверки? B>Что-то я не вижу никакого цикла в приведенном коде...
D>>И какого то условия не хватает?
D>>
B>т.е. условие всегда будет давать false. B>Второе: вопрос на засыпку: к какому if относится else в функции Proverka? B>Третье: какой собственно алгоритм предпологается использовать для проверки простоты?
B>ЗЫ B>Любое число делится на себя и на еденицу без остатка...
Какого то условия не хватает, как проверить простое число или нет?
Первые 2 условия должны быть такими наверно
если целое число делится на само себя и делиться на еденицу и (еще какое то условие)
то число простое.
Иначе Ошибка.
А цикла наверно тут и не надо. Условиями достаточно будет обойтись? D>if (num/num != 1) D>if (num != num/1)
Как их обьеденить? что бы else относился к обоим if?
Здравствуйте, Deposit, Вы писали:
D>Какого то условия не хватает, как проверить простое число или нет?
Я наверное ужасно старомоден, но по-моему, прежде чем писАть программу, неплохо бы определится — что, и, главное, как она будет делать
D>Первые 2 условия должны быть такими наверно D>если целое число делится на само себя и делиться на еденицу
да любое число делится не себя (ну кроме нуля) и на еденицу, так что эти проверки абсолютно беcсмысленны.
D>... и (еще какое то условие)
Вот в именно этом "еще каком-то ксловии" и все дело.
Несколько алгоритмов уже предложили. От себя могу добавить один из простейших методов определения простоты — с помощью решета Эратосфена. Что это такое — легко найти в любом учебнике, ну или в сети.
D>>if (num/num != 1) D>>if (num != num/1)
Пиши с отступами, и со скобочками:
int Proverka(int num)
{
if (num/num != 1)
{
if (num != num/1)
{
return printf("%d\n Число простое\n",num);
}
else
{
return printf("\n Error");
}
}
D>Как их обьеденить? что бы else относился к обоим if?
Например объединить ксловия в одном if.
Здравствуйте, Аноним, Вы писали:
А>Вот нужная тебе функция, алгоритм самый простой:
А>
А>bool isPrimeNumber (int num)
А>{
А> if (num < 0)
А> num = -num;
А> for (int i = 2; i < num / 2; i++)
А> if (!(num % i))
А> return 0;
А> return 1;
А>}
А>
А>А вообще сначала лучше учи математику
Хм... а что, отрицательные числа тоже могуть простыми? И зачем цикл аж до num/2 если достаточно до корня квадратного из num?
Как, однако, все сложно оказалось...
The last good thing written in C was Franz Schubert's Symphony No. 9.
Здравствуйте, Deposit, Вы писали:
D>Здравствуйте, Bell, Вы писали:
B>>Здравствуйте, Deposit, Вы писали:
D>>>Делаю задание, в котором надо написать функцию, которая проверяет является ли данное число простым (простое число- число которое делится без остатка только на себя и 1. 7, 11 и тд.)
[snip] D>Какого то условия не хватает, как проверить простое число или нет? D>Первые 2 условия должны быть такими наверно D>если целое число делится на само себя и делиться на еденицу и (еще какое то условие) D>то число простое. D>Иначе Ошибка.
Стоит обратить внимание на выделенное слово.
[snip]
The last good thing written in C was Franz Schubert's Symphony No. 9.
Здравствуйте, _Winnie, Вы писали: _W>Печать простых чисел от 1 до 100.
PS. Это из святой войны "perl vs C++", про то, где можно писать более непонятный код.
Правильно работающая программа — просто частный случай Undefined Behavior
Здравствуйте, _Winnie, Вы писали:
_W>Здравствуйте, _Winnie, Вы писали: _W>>Печать простых чисел от 1 до 100. _W>PS. Это из святой войны "perl vs C++", про то, где можно писать более непонятный код.
Здравствуйте, _Winnie, Вы писали:
_W>Печать простых чисел от 1 до 100. Достаточно легко вытащить из неё просто проверку на простоту.
template<int>struct prime;//Вычисление N-го простого числа prime<N>::resulttemplate<int>struct is_prime;//Проверка числа на простоту is_prime<N>::resulttemplate<>struct prime<0>{enum{result=2};};//Число 2 нулевое простое числоtemplate<>struct prime<1>{enum{result=3};};//Число 3 первое простое числоtemplate<>struct prime<2>{enum{result=5};};//Число 5 второе простое числоtemplate<>struct is_prime<0>{};//Число 0 не простое и не составноеtemplate<>struct is_prime<1>{};//Число 1 не простое и не составноеtemplate<>struct is_prime<2>{enum{result=true};};//Число 2 простоеtemplate<>struct is_prime<3>{enum{result=true};};//Число 3 простоеtemplate<int n>
struct is_prime{
template<int k>
struct helper{//Вспомогательная структура преобразующая цикл в рекурсию.enum{
tmp=prime<k>::result,
result=helper<(n<tmp*tmp)?0:(n%tmp?k+1:1)>::result
};
};
template<>struct helper<0>{enum{result=true};};//Выход из цикла - число простоеtemplate<>struct helper<1>{enum{result=false};};//Выход из цикла - число составноеenum{
tmp=n%6,//Все простые числа большие трёх имеют вид 6*N+1 или 6*N+5
result=helper<((tmp==1)||(tmp==5))+1>::result//Проверим делится ли n на 5 7 11 13 19 23...
};
};
template<int n,bool>//Вспомогательная структура преобразующая цикл в рекурсию.struct helper{enum{result=helper<n+2,is_prime<n+2>::result>::result};};
template<int n>
struct helper<n,true>{enum{result=n};};
template<int idx>//Возьмём N-1 простое число и будем прибалять двойку пока не получим новое простое числоstruct prime{enum{result=helper<prime<idx-1>::result,false>::result};};
template<int i>
struct program:public program<i-1>{
program():program<i-1>(){std::cout<<prime<i>::result<<endl;}
};
template<>
struct program<0>{
program(){std::cout<<prime<0>::result<<endl;}
};
int main(){
program<100>();
}