Форум программистов, компьютерный форум CyberForum.ru

Простые числа - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.82
nepster
 Аватар для nepster
60 / 60 / 1
Регистрация: 19.09.2009
Сообщений: 844
08.10.2009, 21:37     Простые числа #1
Подскажите пожалуйста как при помощи цикла while и проверки вывести на экран все простые числа от 0 до 100. (1,3,5,7,11,13,17....)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2009, 21:37     Простые числа
Посмотрите здесь:

Даны натуральные числа p и q. Получить все делители числа q, взаимно простые к p. C++
C++ Даны целые числа р и q. Получить все делители числа q, взаимно простые с р
Даны целые числа р и q. Получить все делители числа q, взаимно простые с р. C++
C++ Даны натуральные числа a,b(a<= Ь). Получить все простые числа р, удовлетворяющие неравенствам a<= р<= b.
C++ Найти все трехзначные простые числа. Определить функцию позволяющую распознавать простые числа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
minitup
1 / 1 / 0
Регистрация: 27.09.2009
Сообщений: 8
08.10.2009, 21:46     Простые числа #2
=) Ну, как вариант можете проверять каждое число от 1 до 100 на простоту, а потом суммировать простые(не быстро, но интересно). Можно использовать алгоритмы генерации(типа решета Эратосфена и т.п.) простых чисел для интервала 1-100, и тоже суммировать.
nepster
 Аватар для nepster
60 / 60 / 1
Регистрация: 19.09.2009
Сообщений: 844
08.10.2009, 21:52  [ТС]     Простые числа #3
не вариант! чисел может быть 65525 например! от 0 до 100 это так как бы образец. Мне сам алгоритм нужен
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
08.10.2009, 22:23     Простые числа #4
простые числа от 0 до 100. (1,3,5,7,11,13,17....)
1 - не является простым или составным числом !
И в списке нет простого числа 2 !

Мне сам алгоритм нужен
Достаточно поискать в форуме
http://www.cyberforum.ru/cpp-beginne...tml#post243387
minitup
1 / 1 / 0
Регистрация: 27.09.2009
Сообщений: 8
08.10.2009, 22:31     Простые числа #5
Так-то наоборот вариант, сразу и оцените падение скорости грубого алгоритма при увеличении сложности.

Вот на 1С кусок с алгоритмом(не решето):

МассивПростыхЧисел = Новый Массив;
СуммаПростых = 0;
Для Счетчик = 1 По ВерхняяГраница Цикл
Простое = Истина;

Если Счетчик = 1 Тогда
Продолжить;
КонецЕсли;

МаксЦелДелитель = Цел(Pow(Счетчик, 0.5));
Если МаксЦелДелитель = 1 Тогда //числа 2 и 3
Иначе
Для СчетчикПростых = 1 По МассивПростыхЧисел.Количество() Цикл
ТекЧислоМассива = МассивПростыхЧисел.Получить(СчетчикПростых - 1);
Если ТекЧислоМассива > МаксЦелДелитель Тогда
Прервать;
КонецЕсли;

Если Счетчик/ТекЧислоМассива = Цел(Счетчик/ТекЧислоМассива) Тогда
Простое = Ложь;
Прервать;
КонецЕсли;

КонецЦикла;

КонецЕсли;

Если Простое Тогда
МассивПростыхЧисел.Добавить(Счетчик);
СуммаПростых = СуммаПростых + Счетчик;


Для Си++ тут вроде есть http://forum.codenet.ru/showthread.p...F7%E8%F1%EB%E0
nepster
 Аватар для nepster
60 / 60 / 1
Регистрация: 19.09.2009
Сообщений: 844
08.10.2009, 23:00  [ТС]     Простые числа #6
odip

Та то все не то! тм воды больше чем нужно!


minitup

консольный С нужен а не С ++...

А простые числа, это числа которые делятся только на 1 и на самого себя...
я даже вообще не знаю как это реализовать! По аданию нужно использовать только проверку и while цикл
}{ottab
 Аватар для }{ottab
14 / 13 / 3
Регистрация: 04.03.2009
Сообщений: 75
08.10.2009, 23:09     Простые числа #7
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
 
void main()
{
    int i,j;
    for (i=3; i<100; i++)
    {
        bool flag=true;
        j=2;
        while (j<=sqrt((double)i))
        {
            if (i%j==0) {flag=false; break;}
            j++;
        }
        if (flag==true) printf("%d\n",i);
    }
    getchar();
}
nepster
 Аватар для nepster
60 / 60 / 1
Регистрация: 19.09.2009
Сообщений: 844
08.10.2009, 23:54  [ТС]     Простые числа #8
Ошибка 2 error C3861: sqrt: идентификатор не найден c:\documents and settings\nepster\мои документы\visual studio 2008\projects\657657567657\657657567657\657657567657.cpp 20 657657567657


Ошибка 3 fatal error C1903: не удается восстановить после предыдущих ошибок; остановка компиляции c:\documents and settings\nepster\мои документы\visual studio 2008\projects\657657567657\657657567657\657657567657.cpp 20 657657567657

две ошибки
TanT
эволюционирую потихоньку
 Аватар для TanT
464 / 462 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
09.10.2009, 07:29     Простые числа #9
Цитата Сообщение от nepster Посмотреть сообщение
две ошибки
нет там ошибок у }{ottab. возьмите/скопируйте весь код. вероятно вы библиотеку math не подключили

единтсвенно, в начале кода к последующему списку можно присовокупить числа 1 и 2 для полноты картины
mamedovvms
2913 / 834 / 93
Регистрация: 30.04.2009
Сообщений: 2,613
09.10.2009, 07:38     Простые числа #10
Цитата Сообщение от }{ottab Посмотреть сообщение
for (i=3; i<100; i++)
здесь можно написать по другому
C#
1
for (i=3;i<100;i+=2)
так как кроме двойки все остальные должны быть нечетные, и по этому не стоит проверять четные
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
09.10.2009, 11:25     Простые числа #11
Та то все не то! тм воды больше чем нужно!
Вычерпай !
В конце концов кто должен учиться писать программы ?
mamedovvms
2913 / 834 / 93
Регистрация: 30.04.2009
Сообщений: 2,613
09.10.2009, 12:14     Простые числа #12
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
#include <iostream>
#include <math.h>
using namespace std;
int main()
{  int a[100]={0};
   int i=0, k=0;
   bool l;
   a[0]=2;   
  for (i=3;i<100;i+=2)
  {    int j=0;     
       l=false;
      while (j<=k && l==false && a[j]<sqrt(i))
      {
       if ((i%a[j])==0){l=true;}
       j++;
      }
       if (l==false){k++;a[k]=i;}       
  }  
   for (i=0;i<=k;i++)
    cout<<a[i]<<"\n";
   system("pause");
 
 
}
nepster
 Аватар для nepster
60 / 60 / 1
Регистрация: 19.09.2009
Сообщений: 844
09.10.2009, 16:16  [ТС]     Простые числа #13
спасибо конечно, но фор нельзя использовать (в задании). + я даже не знаю что за библиотека #include <math.h>
TanT
эволюционирую потихоньку
 Аватар для TanT
464 / 462 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
09.10.2009, 16:23     Простые числа #14
Цитата Сообщение от nepster Посмотреть сообщение
спасибо конечно, но фор нельзя использовать (в задании). + я даже не знаю что за библиотека #include <math.h>
math - это для вычисления математики разной, здесь используется для вычисления корня (sqrt)

for - замени на while. получиться как-то так
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
28
29
30
31
32
33
#include <iostream>
#include <cmath>
 
using namespace std;
int main()
{  
    int a[100]={0};
    int i=0, k=0;
    bool l;
    a[0]=2;
    
 
    i=3;
    while(i<100)
    {    
        int j=0;
        l=false;
        while (j<=k && l==false && a[j]<(int)sqrt((double)i))
        {
            if ((i%a[j])==0){l=true;}
            j++;
        }
        if (l==false){k++;a[k]=i;} 
        i+=2;
    } 
 
    i=0;
    while (i<=k)
    { cout<<a[i]<<"\n"; ++i;}
    system("pause");
 
 
}
nepster
 Аватар для nepster
60 / 60 / 1
Регистрация: 19.09.2009
Сообщений: 844
09.10.2009, 18:57  [ТС]     Простые числа #15
о отлично оно работает, только последнее но осталось! Выводит числа 9, 15, 25 и др. А это не простые числа, а как их убратЬ?
TanT
эволюционирую потихоньку
 Аватар для TanT
464 / 462 / 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)))
nepster
 Аватар для nepster
60 / 60 / 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
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;
}
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2011, 12:29     Простые числа
Еще ссылки по теме:

C++ Одномерный массив. Вывести на экран все числа, индексы которых есть простые числа.
C++ Дано натуральное число. Вывести на экран все простые числа до заданного числа.
Даны натуральные числа p и q. Получить все делители числа q, взаимно простые к p C++

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

Или воспользуйтесь поиском по форуму:
Nesnakomez
0 / 0 / 0
Регистрация: 11.07.2009
Сообщений: 21
13.08.2011, 12:29     Простые числа #20
вопрос снят
Yandex
Объявления
13.08.2011, 12:29     Простые числа
Ответ Создать тему

Метки
решето эратосфена
Опции темы

Текущее время: 19:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru