Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.82
nepster
61 / 61 / 1
Регистрация: 19.09.2009
Сообщений: 844
#1

Вывести все простые числа от 0 до 100 (цикл while) - C++

08.10.2009, 21:37. Просмотров 4875. Ответов 26

Подскажите пожалуйста как при помощи цикла while и проверки вывести на экран все простые числа от 0 до 100. (1,3,5,7,11,13,17....)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2009, 21:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вывести все простые числа от 0 до 100 (цикл while) (C++):

Цикл: Найти и напечатать все простые числа, меньше 100 - C++
Надо написать программу, которая находит и печатает все простые числа меньше 100, дайте, пожалуйста, пример, от которого можно...

Цикл: Вывести все простые числа от M до N включительно - C++
Вывести все простые числа от M до N включительно. Вывести числа в порядке возрастания, по одному в строке. Если между M и N включительно...

Вывести простые числа от 1 до 100 - C++
Программа должная выводить все простые числа от 1 до 100. Вот, вроде написал, но не могу понять, почему не выводит 1, 3, 7. #include...

Вывести простые числа в пределах до 100 - C++
Помогите с кодом, пожалуйста. Суть задачи в том, чтобы на экран вывести простые числа в пределах до 100. Когда я запускаю код, пишет...

Найти все простые числа в диапазоне от 1 до 100 - C++
Заранее прошу прощения за , возможно, глупые вопросы, так как я новичок и на форуме и в програмировании. Начал с С++ (знаю не лучший выбор...

Найти все простые числа из интервала от 100 до 1000, используя логическую функцию - C++
Нужно написать программу, буду премного благодарен) Знаю, что на самом деле тут всё просто, но я только начал учиться и пока не совсем...

26
TanT
эволюционирую потихоньку
467 / 465 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
09.10.2009, 19:29 #16
н-да. видимо автор несколько ошибся, замени
C++
1
while (j<=k && l==false && a[j]<(int)sqrt((double)i))
на
C++
1
while (j<=k && l==false && a[j]<=(int)sqrt((double)i)))
0
nepster
61 / 61 / 1
Регистрация: 19.09.2009
Сообщений: 844
09.10.2009, 19:44  [ТС] #17
ой ой ой спасибо большое все заработало =)

Добавлено через 6 минут
только пару вопросов еще. Я начал вникать в код, вот кое что не понял:

C
1
2
3
int a[100]={0};
int i=0, k=0;
a[0]=2;
Что это за обозначение переменных?

что такое
C
1
bool l;

C
1
while (j<=k && l==false && a[j]<=(int)sqrt((double)i))
что значит l==false - что переменная лож? Оо

и вот это не очень понял a[j]<=(int)sqrt((double)i))


C
1
cout<<a[i]<<"\n"; ++i;
и при выводе зачем ++i
0
Sich_Taras
14 / 14 / 1
Регистрация: 08.10.2009
Сообщений: 114
09.10.2009, 19:59 #18
Для этого можно использовать решето Эратосфена.

Добавлено через 10 минут
Вот реализация оптимизированного решета Эратосфена на С++ MS Visual 9.0 :

Добавлено через 20 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//Решето Эратосфена реализация
#include<iostream>
using namespace std;
 
int main()
{
    int nSize;
    cout << "Limit = ";
    cin >> nSize;
    nSize++;
    bool* bArray = new bool [nSize];
 
    memset(bArray, 1, nSize);
 
    for(int i = 2; i < nSize; ++i)
        if(bArray[i])
        for(int j = i*i; j < nSize; j += i)
            bArray[j] = false;
    cout << "All primes numbers from 0 to " << (nSize - 1) << ":" << endl;
    for(int i = 2; i < nSize; ++i)
        if(bArray[i])
        printf("%d ", i);
 
    cout << endl;
 
    return 0;
}
2
x-positive
1 / 1 / 0
Регистрация: 09.02.2011
Сообщений: 21
24.02.2011, 01:10 #19
Как вариант введу свой код, может кому-то пригодится:
(код готовой программы, которая выводит все простые числа, меньше чем число N)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <conio.h>
 
main()
{
float N;
int Z=1, I, X=3;
 
printf("N = ");
scanf("%f",&N);
printf("P-s: 1,2");
 
while (X<N)
{
   for (I = 2; I < X; I++) if (!(X % I)) Z = 0;
 
   if (Z) printf(",%i",X);
   Z = 1;
 
   X++;
}
 
getch();
return 0;
}
0
Nesnakomez
0 / 0 / 0
Регистрация: 11.07.2009
Сообщений: 21
13.08.2011, 12:29 #20
вопрос снят
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
13.08.2011, 13:52 #21
Цитата Сообщение от x-positive Посмотреть сообщение
Как вариант введу свой код, может кому-то пригодится:
(код готовой программы, которая выводит все простые числа, меньше чем число N)

C++
1
2
3
#include <stdio.h>
while (X<N)
   for (I = 2; I < X; I++) if (!(X % I)) Z = 0;
С таким внутренним циклом for это как идти в магазин за хлебом и каждый дом, стоящий на пути, по 10 раз вокруг обходить, а то и больше
0
diagon
Higher
1936 / 1202 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.08.2011, 13:55 #22
Нашел у себя быдлокод, заточенный под
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <fstream>
#include <cmath>
int p[99999], k, i = 3, f, s, j, c, q, x;
main(){
    std::fstream("input.txt") >> f >> s;
    std::ofstream o("output.txt");
    if (f == 2) { o << 2 << ' '; c = 1; }
    for (; i <= s; i+=2){
        x = 1;
        for (j = 0, q = sqrt(1. * i); j < k && p[j] <= q; )
            if (i % p[j++] == 0) {x = 0; break;}
        if (x) {
            p[k++] = i; 
            if ( i >= f) {o << i << ' '; c = 1;}
        }
    }
    if (!c) o << "Absent"; 
}
Просто перебор всех нечетных чисел и проверка, делится ли число на числа до своего корня там по времени не проходит =)
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
13.08.2011, 14:00 #23
Цитата Сообщение от diagon Посмотреть сообщение
Нашел у себя быдлокод...
Просто перебор всех нечетных чисел и проверка, делится ли число на числа до своего корня там по времени не проходит =)
И почему бы вам решетом Эратосфена не воспользоваться, с таким диапазоном почти никаких расходов памяти.
1
diagon
Higher
1936 / 1202 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.08.2011, 14:07 #24
Цитата Сообщение от Olga_ Посмотреть сообщение
почему бы вам решетом Эратосфена не воспользоваться, с таким диапазоном почти никаких расходов памяти.
Я тогда о нем не знал, да и пройдет он разве...
Там же O(nloglogn), а числа надо до 10^6 перебрать менее чем за секунду.
Вышеприведенный код и то за полсекунды справляется =(
0
grizlik78
Эксперт С++
1981 / 1474 / 127
Регистрация: 29.05.2011
Сообщений: 3,047
13.08.2011, 14:09 #25
Цитата Сообщение от diagon Посмотреть сообщение
Я тогда о нем не знал, да и пройдет он разве...
Там же O(nloglogn), а числа надо до 10^6 перебрать менее чем за секунду.
Ну я как раз им и делал. Да и первые два места вряд ли чем другим. Хотя, кто знает
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
13.08.2011, 14:15 #26
Цитата Сообщение от diagon Посмотреть сообщение
Я тогда о нем не знал, да и пройдет он разве...
Там же O(nloglogn), а числа надо до 10^6 перебрать менее чем за секунду.
Вышеприведенный код и то за полсекунды справляется =(
В логическом массиве размера не более 1 Мб должен быстро пройти. Других более быстрых алгоритмов вроде бы нет. Здесь нет делений, одни присвоения и плюсы в цикле. Не зря диапазон от M до N задан, это неспроста

Добавлено через 2 минуты
Цитата Сообщение от grizlik78 Посмотреть сообщение
Ну я как раз им и делал. Да и первые два места вряд ли чем другим. Хотя, кто знает
Это да. Вот если бы число N было бы неограниченным таким очевидным образом, что именно алгоритм Эратосфена, то пришлось бы поломать голову
0
grizlik78
Эксперт С++
1981 / 1474 / 127
Регистрация: 29.05.2011
Сообщений: 3,047
13.08.2011, 14:19 #27
Цитата Сообщение от Olga_ Посмотреть сообщение
Других более быстрых алгоритмов вроде бы нет.
Решето Аткина должно быть более быстрым и требует меньше памяти. Но оно многократно сложнее этого незатейливого алгоритма и я пока не решился на его реализацию А уж если в рейтинг пытаться влезть, то точно не подойдёт.
1
13.08.2011, 14:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2011, 14:19
Привет! Вот еще темы с ответами:

Дано натуральное число. Вывести на экран все простые числа до заданного числа. - C++
Дано натуральное число. Вывести на экран все простые числа до заданного числа.

Одномерный массив. Вывести на экран все числа, индексы которых есть простые числа. - C++
Нужно вывести на экран все числа заданной последовательности, индексы которых есть простые числа. Определить в заданной последовательности...

Вывести все простые числа до n - C++
должно быть так bool SimpleNumber(long int) int main() telo ........

Вывести все простые числа до заданного числа - C++
Нужно вывести все простые числа до заданного числа N. С помощью процедуры и без массивов.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru