Другие языки программирования и технологии

c++ сильно завис алгоритм нахождения простых чисел - пару вопросов ?

inline bool simple(int);

int main()
{

for(int i = 1; i <= 10000; i++)
if(simple(i))
cout << setw(5) << setiosflags(ios::left) << i;

_getch();
return 0;
}

inline bool simple(int num)
{
if(num < 2)
return false;
else
for(int i = 2; i <= num/2; i++)
if(num % i == 0)
return false;

return true;
}

(1) В main if(simple(i)) - правильно ли понимаю что это возвращает только true? как это так ?
(2) Как в самой функции совместить sqrt и % ? тк через корень увеличивается скорость программы
inline bool simple(int num)
{
if(num < 2) // если число меньше двух
return false; // вернуть false(в данном случае if из программы не сработает)
else // иначе
for(int i = 2; i <= num/2; i++) // выполнять цикл пока i меньше или равно num/2
if(num % i == 0) // если остаток от деления числа num на число i равен нулю (делится без остатка то есть не простое число)
return false; //вернуть false(if из программы не сработает при false)

return true; // И все таки если не нашли числа которое делится без остатка, то это простое число и возвращаем true(и вот тут if, который в программе сработает)

//Как заменить остаток от деления на корень числа я вообще не представляю!
}
Иван Черненко
Иван Черненко
15 388
Лучший ответ
Сергей Тимофеев не понимаю почему из функции не возвращается false - это же тоже считается выполнение функции
#include <iostream>
#include <iomanip>
using namespace std;
template<typename Type>
bool is_prime(Type num) {
bool prime;
if (num < 6 && (num <= 2 || num == 3 || num == 5)) prime = true;
else if (~num & 1 || 0 == num % 3 || 0 == num % 5) prime = false;
else {
Type n;
for (n = 3; n * n <= num && num % n; n += 2) { ; }
prime = n * n > num? true : false;
}
return prime;
}
int main() {
for (short i = 1; i != 10000; ++i) if (is_prime(i)) cout << ' ' << setw(5) << i;
cout.put('\n');
cin.get();
}
Павел П
Павел П
72 484
if(simple(i)) cout << setw(5) << setiosflags(ios::left) << i;
если число_простое (i) то выводим это число на экран
И это может возвратить не только истину, то бишь если число не простое, то возврат фалсе
Marat Marat
Marat Marat
65 659
Сергей Тимофеев в том и дело что возвращает только тру

не могу уловить почему
Сергей Тимофеев в примере где списал функция написана вот так

inline bool simple(int num)
{
if(num < 2)
return false;
else
for(int i = 2; i <=sqrt (num); i++)
if(num % i == 0)
return false;

return true;
}

и получается или sqrt или убирать % - один тип только с плавающей точкой работает (sqrt ) второй % только с целым типом ?