Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Проблема написал код ну прога не запускается


Автор: ergocom 20.8.2006, 23:21
Написал код программы не выдает ошибок и работать не хочет!
Код

#include <iostream>
using namespace std;
int main()
{
    
    int number ;
    int number2;
    for(number=2; number<17; number++){
        for(number2=2; number2<number; number2++){
             if((number%number2)!=0) 
                 continue;
             else 
                 number=true;
             break;
        }
    }

    if(!number){
        cout<<number;
    }  else
        number=false;                   
    return 0;
}


программа должна выводить простые числа  тока не хочет работать

Автор: vinter 21.8.2006, 00:03
 форматируй код пожалуйста, а то читать совершенно невозможно
У тебя бесконечный цикл:
Код

for(number=2; number<17; number++)
    {
        for(number2=2; number2<number; number2++)
        {

            if((number%number2)!=0)
                continue;
            else // когда nuber = 4 выпадает эта ситуация,                            
                number = TRUE;  //и ты присваиваешь number = 1, цикл идет дальше увеличивая number на 1,                                                                                                           // и он снова равен 4 ситуация будет повторятся до бесконечности
            break;
        }
    }

Автор: Romikgy 21.8.2006, 00:06
smile экономия должна быть экономной (с)

Цитата(ergocom @  20.8.2006,  22:21 Найти цитируемый пост)
 number=true;


Цитата(ergocom @  20.8.2006,  22:21 Найти цитируемый пост)
 if(!number)


Цитата(ergocom @  20.8.2006,  22:21 Найти цитируемый пост)
cout<<number;

зачем делаешь все это с одной переменой?

Автор: ergocom 21.8.2006, 00:24
Как мне это исправить первый раз сделал бесконечный цыкл 
и как мона проще написать чтоб выводились такие цыфри 1,3, 7, 11,(простые числа)

а то решил переписать код с php и вот к чему ето привело там место $flag=true,
$flag=false, ( а я оставил  number место $flag)

Автор: Rockie 21.8.2006, 03:50
по-моему это уже есть на форуме. в алгоритмах
нахождение простых чисел. 
Код
//////////////////////////////////////////////////////////////////////////////
//
//  Finding prime numbers
//  (c) Johna Smith, 1996
//
//  Method description:
//   We take a number and try to divide it. If we can divide it
//   without remainder - this is not prime number.
//   We can take into account only odd numbers, because we can
//   divide all even number by 2. Also we can store all prime
//   numbers that are already found in an array and try to divide
//   all new numbers only by numbers from this array.
//   If we want to find all prime numbers less than N the size of
//   the array should be sqrt(N)/2
//
//////////////////////////////////////////////////////////////////////////////

#include <stdio.h>

#define N   160  // so we can find all prime numbers that are less than 100000
#define M   25   // check all numbers less than 250

int Simple[N];
int k=0;
enum {yes,no} simple;

void main(void)
{
 // it's easy: 2 and 3 are prime
 if (M>=2) printf("2\n"); // 2 is simple 'cause we can divide it only by itself and 1
 Simple[k++]=2;
 if (M>=3) printf("3\n");
 Simple[k++]=3;

 // but what we can say about other numbers:
 for(int i=5;i<=M;i+=2)
 {
   simple=yes;
   for(int j=0;j<k;j++)
   {
     if (Simple[j]*Simple[j]>i) break; // other Simple[j] is too big for i
     if ((i%Simple[j])==0) simple=no; // there's no remainder - not prime
   }
   if (simple==yes)
   {
     printf("%d\n",i);
     Simple[k++]=i;
   }
 }
}

Автор: Romikgy 21.8.2006, 08:27
Цитата(ergocom @  20.8.2006,  23:24 Найти цитируемый пост)
 а я оставил  number место $flag

дык введи переменую flag

Автор: ergocom 22.8.2006, 04:12
Код


include <iostream>
// выводит простые числа с 1 -19 !
using namespace std;



int main()

{
    

    for(int i=1 ; i<21 ; i+=2)
cout<< i;
    

  return 0;
}


все на много проще просто подумать надо было!

Автор: zkv 22.8.2006, 06:40
Цитата(ergocom @ 21.8.2006, 00:24)
и как мона проще написать чтоб выводились такие цыфри 1,3, 7, 11,(простые числа)


Цитата(ergocom @ 22.8.2006, 04:12)

 for(int i=1 ; i<21 ; i+=2)
cout<< i;

я вообще запутался теперь, что такое ПРОСТЫЕ числа smile, мне казалось что до 19 это будут:
1, 2, 3, 5, 7, 11, 13, 17, 19 (насчет 1 не уверен)

Автор: Rockie 22.8.2006, 07:37
Простое число - это число, которое делится только на себя и на 1.
Цитата(zkv @  22.8.2006,  06:40 Найти цитируемый пост)
я вообще запутался теперь, что такое ПРОСТЫЕ числа , мне казалось что до 19 это будут:1, 2, 3, 5, 7, 11, 13, 17, 19 (насчет 1 не уверен)

пока да. а дальше 19 + 2 = 21 - уже не простое число, так как делится еще на 7 и 3

Автор: ergocom 22.8.2006, 07:45
Ага  делятся тока сами на себя ! о smile казыватся цыклы сильная вещь!
а как сделать чтоб дальше и 23 шло?
или 21 это изключение !

Автор: zkv 22.8.2006, 07:58
2ergocom поправьте меня если я не прав, ряд который вы привели в качестве примера простых чисел (1,3, 7, 11), по моему не полный, а ваш цикл:
Код

 for(int i=1 ; i<21 ; i+=2)
cout<< i;
   
вообще выводит нечетные числа вместо простых, все-таки, вы что хотите получить? 

Автор: ergocom 22.8.2006, 08:07
как мона вывести все цыфры с 1- 100 чтоб они были простыми!
мой цыкл уже не правельно работает так как может вывести 21 и др цыфри еще такие будут!
может мна с использованием 2 цыклов? smile 

Автор: zkv 22.8.2006, 08:22
ваш цикл во-первых 21 не выведет, во вторых среди нечетных НЕ простых чисел тоже хватает, а чем собственно не нравится алгоритм предложенный Rockie, выше?

Автор: MAKCim 22.8.2006, 09:41
Цитата

как мона вывести все цыфры с 1- 100 чтоб они были простыми!

Код

#include <iostream>

bool is_simple(unsigned long number)
{
    if (number>0 && number<4)
        return true;
    unsigned long i=2;
    for (; i<number &&
        number%i; ++i);
    return i==number;
}

template<class Stream> void find_sn(
        unsigned long left, 
        unsigned long right, 
        Stream& stream
    )
{
    while (left<=right)
    {
        if (is_simple(left)) 
            stream<<left<<std::endl;
        ++left;
    }
}

int main()
{
    find_sn(1,100,std::cout);
    return 0;
}

Автор: Romikgy 22.8.2006, 09:45
http://algolist.manual.ru/maths/teornum/index.php
http://www.borlpasc.narod.ru/FAQ/2_3_3_1.htm
проверка на простое число

Автор: albertn 22.8.2006, 09:48
Цитата(MAKCim @ 22.8.2006,  09:41)
Цитата

как мона вывести все цыфры с 1- 100 чтоб они были простыми!

Код

#include <iostream>

bool is_simple(unsigned long number)
{
    if (number>0 && number<4)
        return true;
    unsigned long i=2;
    for (; i<number &&
        number%i; ++i);
    return i==number;
}

template<class Stream> void find_sn(
        unsigned long left, 
        unsigned long right, 
        Stream& stream
    )
{
    while (left<=right)
    {
        if (is_simple(left)) 
            stream<<left<<std::endl;
        ++left;
    }
}

int main()
{
    find_sn(1,100,std::cout);
    return 0;
}

Криво, очень криво. Зачем просто так перебирать все делители, если вполне достаточно перебирать уже полученные простые числа, как в предыдущем примере?

Автор: MAKCim 22.8.2006, 11:10
Цитата

Криво, очень криво. Зачем просто так перебирать все делители, если вполне достаточно перебирать уже полученные простые числа, как в предыдущем примере?

Не криво, а нерационально с точки зрения времени выполнения (предыдущий пример требует дополнительной памяти)
да я и не говорил, что мой вариант лучше

Автор: albertn 22.8.2006, 12:12
Цитата(MAKCim @ 22.8.2006,  11:10)
Не криво, а нерационально с точки зрения времени выполнения (предыдущий пример требует дополнительной памяти)
да я и не говорил, что мой вариант лучше

Редко когда простые числа нужны только для вывода на экран. А память сейчас это не главное, по крайней мере в данной программе. Сейчас главное это скорость и универсальность. А если ему надо будет расчитать до 1000 или 10000, то сколько же она тогда будет вычислять?

Автор: MAKCim 22.8.2006, 12:38
Цитата

А если ему надо будет расчитать до 1000 или 10000, то сколько же она тогда будет вычислять? 

меньше секунды на моем PIV
Цитата

 и универсальность.

Вот именно, если мне надо просто проверить, является ли число x>1000000 простым, мне что, надо последовательно находить все простые числа
и делить на них?
м вообще здесь алгоритмы не обсуждаются
человек просил
Цитата

программа должна выводить простые числа  тока не хочет работать

я написал, программа работает и является достаточно универсальной

Автор: albertn 22.8.2006, 12:44
Цитата(MAKCim @ 22.8.2006,  12:38)
я написал, программа работает и является достаточно универсальной

Я это все к тому, что зачем писать код, пусть даже он более простой, если уже разобран пример более универсальной программы?

Автор: MAKCim 22.8.2006, 12:52
Цитата

Я это все к тому, что зачем писать код, пусть даже он более простой, если уже разобран пример более универсальной программы? 

все, не хочу дальше спорить, мир  smile 

Автор: ergocom 22.8.2006, 16:37
Мне надо простой а не с обьектои классом
до них я еще не дошел smile 

Автор: ergocom 24.8.2006, 07:56
Народ вы правы мне нужны простые числа вот как мона очень легко их найти!  smile 
Код

#include <iostream> 
using namespace std; 

int main() {  
_wsetlocale(LC_ALL, L"Russian");
  int i, j; 
  bool prime; 

  for(i=1; i < 100; i++) { 
    prime = true;  

    
    for(j=2; j <= i/2; j++) 
     
      if((i%j) == 0) prime = false; 

    if(prime) 
      cout << i << "  Простые числа с 1-100\n"; 
  } 

  return 0; 
}


Автор: pablo 24.8.2006, 09:41
Это классический пример - "Решето Ератосфена"

Автор: albertn 24.8.2006, 10:10
Цитата(ergocom @ 24.8.2006,  07:56)
Народ вы правы мне нужны простые числа вот как мона очень легко их найти!  smile 
Код

#include <iostream> 
using namespace std; 

int main() {  
_wsetlocale(LC_ALL, L"Russian");
  int i, j; 
  bool prime; 

  for(i=1; i < 100; i++) { 
    prime = true;  

    
    for(j=2; j <= i/2; j++) 
     
      if((i%j) == 0) prime = false; 

    if(prime) 
      cout << i << "  Простые числа с 1-100\n"; 
  } 

  return 0; 
}


Я только одного не понял, почему i/2 а не корень?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)