Печать простых чисел от 1 до 100 - PullRequest
13 голосов
/ 05 марта 2011

Этот код c ++ выводит следующие простые числа: 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97.

Но я не думаю, что моя книга так хочет, чтобы ее писали. Здесь упоминается кое-что о квадратном корне числа. Поэтому я попытался изменить свой второй цикл на for (int j=2; j<sqrt(i); j++), но он не дал мне нужного результата.

Как мне нужно изменить этот код так, как того хочет моя книга?

int main () 
{
    for (int i=2; i<100; i++) 
        for (int j=2; j<i; j++)
        {
            if (i % j == 0) 
                break;
            else if (i == j+1)
                cout << i << " ";

        }   
    return 0;
}

Простое целое число - это число, которое имеет ровно два разных делителя, а именно 1 и сам номер. Написать, запустить и протестировать программу на C ++, которая находит и печатает все простые числа меньше 100. (Подсказка: 1 - простое число число. Для каждого числа от 2 до 100 найти остаток = число% n, где n колеблется от 2 до sqrt (число). \ Если н больше, чем sqrt (число), число не делится поровну на п. Зачем? Если какой-либо остаток равен 0, число не является простым числом.)

Ответы [ 21 ]

0 голосов
/ 24 мая 2014

Простая программа для печати "N" простых чисел. Вы можете использовать значение N как 100.

    #include  <iostream >
    using  namespace  std;

    int  main()
    {
        int  N;
        cin  >>  N;
        for (int  i =  2;  N > 0;  ++i)
        {
            bool  isPrime  =  true ;
            for (int  j =  2;  j < i;  ++j)
            {
                if (i  % j ==  0)
                {
                    isPrime  =  false ;
                    break ;
                }
            }
            if (isPrime)
            {
                --N;
                cout  <<  i  <<  "\n";
            }
        }
        return  0;
    }
0 голосов
/ 07 мая 2014

Я сделал это на Perl, основываясь на самом популярном ответе 2-го метода ProdigySim.Мне пришлось добавить break эквивалент в perl, last, сразу после print $i . " \n";, чтобы избежать вывода простых чисел дважды.

#!/bin/perl
use strict;

for(my $i=2; $i < 100; $i++){

    my $prime = 1;

    for (my $j=2; $j*$j<=$i; $j++){
        if ($i % $j == 0){
            $prime = 0;
            last;
        }
        if($prime) {
            print $i . " \n";
            last;
        }
    }

}
0 голосов
/ 03 февраля 2014

Чтобы найти, нет ли.простое или нет C ++:

#include<iostream>
#include<cmath>

using namespace std;
int main(){

int n, counter=0;

cout <<"Enter a number to check whether it is prime or not \n";
cin>>n;

  for(int i=2; i<=n-1;i++) {
    if (n%i==0) {
      cout<<n<<" is NOT a prime number \n";
      break;
    }
    counter++;
                }
    //cout<<"Value n is "<<n<<endl;
    //cout << "number of times counter run is "<<counter << endl;
    if (counter == n-2)
      cout << n<< " is prime \n";
   return 0;
}
0 голосов
/ 09 января 2014

Я всегда использую это (это легко и быстро):

#include <iostream>
using namespace std;

int i,j;
bool b[101];

int main( )
{
    for(i=2;i<101;i++){
        b[i]=true;
    }
    for(i=1;i<101;i++){
        if(b[i]){
            cout<<i<<" ";
            for(j=i*2;j<101;j+=i) b[j]=false;
        }
    }
}

Вот вывод этого кода: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 6771 73 79 83 89 97

0 голосов
/ 19 декабря 2013

Просто попробуйте это.Это просто без каких-либо дополнительных встроенных функций.

#include <iostream>

int prime(int n,int r){

  for(int i=2;n<=r;i++){
    if(i==2 || i==3 || i==5 || i==7){
      std::cout<<i<<" ";
      n++;
    } else if(i%2==0 || i%3==0 || i%5==0 || i%7==0)
      continue;
    else {
      std::cout<<i<<" ";
      n++;
    }
  }

}

main(){

  prime(1,25);
}

Тестирование 2 , 3 , 5 , 7 достаточно для 120 , поэтому 100 в порядке.

Есть 25 простых чисел ниже 100 , 30 ниже 121 = 11 * 11 .

0 голосов
/ 23 сентября 2013

это мой подход из простого блога:

//Prime Numbers generation in C++
//Using for loops and conditional structures
#include <iostream>
using namespace std;

int main()
{
int a = 2;       //start from 2
long long int b = 1000;     //ends at 1000

for (int i = a; i <= b; i++)
{

 for (int j = 2; j <= i; j++)
 {
    if (!(i%j)&&(i!=j))    //Condition for not prime
        {
            break;
        }

    if (j==i)             //condition for Prime Numbers
        {
              cout << i << endl;

        }
 }
}
}

- подробнее на: http://www.programmingtunes.com/generation-of-prime-numbers-c/#sthash.YoWHqYcm.dpuf

0 голосов
/ 16 сентября 2013
#include "stdafx.h"
#include<iostream>
using namespace std;
void main()
{ int f =0;
 for(int i=2;i<=100;i++)
  {
   f=0;
   for(int j=2;j<=i/2;j++)
   { 
     if(i%j==0)
     { f=1;
       break;
     }
   }
 if (f==0)
  cout<<i<<" ";
}
 system("pause");
}
0 голосов
/ 11 марта 2012
#include<iostream>
using namespace std;
void main()
{
        int num,i,j,prime;
    cout<<"Enter the upper limit :";
    cin>>num;
    cout<<"Prime numbers till "<<num<<" are :2, ";

    for(i=3;i<=num;i++)
    {
        prime=1;
        for(j=2;j<i;j++)
        {
            if(i%j==0)
            {
                prime=0;
                break;
            }
        }
        if(prime==1)
            cout<<i<<", ";
    }
}
0 голосов
/ 08 марта 2011

Используя правила делимости простые числа можно найти в O (n), и это действительно эффективно Правила делимости

Решение будет основано на отдельных цифрахчисло ...

0 голосов
/ 09 марта 2018

Книга, кажется, "C ++ для инженеров и ученых" написанный Гари Бронсоном (погуглил).
Это возможный ответ? ИМХО это удивительно.

Мне пришлось читать вопрос (из книги) несколько раз. Моя интерпретация:
Для каждого числа N: 2 <= N <100 проверьте, является ли оно простым. <br> Как? Для каждого делителя D: 2 <= D <sqrt (N), <br> если D делит N, N не простое число, если D> sqrt (N), то N простое.

Попробуйте:

N = 2, sqrt(2) ≈ 1.41, D = 2, 2 < 1.41 ?  no 2 > 1.41 ? yes 2 is prime.  
N = 3, sqrt(3) ≈ 1.73, D = 2, 2 < 1.73 ?  no 2 > 1.73 ? yes 3 is prime.  
N = 4, sqrt(4) = 2.00, D = 2, 2 < 2.00 ?  no 2 > 2.00 ?  no 4 is not prime.  
N = 5, sqrt(5) ≈ 2.24, D = 2, 2 < 2.24 ? yes 5 % 2 > 0? yes  
                       D = 3, 3 < 2.24 ?  no 3 > 2.24 ? yes 5 is prime.    
N = 6, sqrt(6) ≈ 2.45, D = 2, 2 < 2.45 ? yes 6 % 2 = 0  2 > 2.45 ? no 6 is not prime.

Насколько я понимаю, вот как должны быть найдены простые числа,
не с ситом (намного, намного быстрее),
но с: ответ в вопросе! Удивительно?

Скорость? простые числа <400 000: менее 10 секунд (на моих часах, rolex, я купил их на рынке, продавец сказал, что это был настоящий, настоящий по цене двух багетов с 12 настоящими бриллиантами). <br> Давайте посчитаем простые числа (я не собираюсь показывать код;): 664579 простых чисел <10 000 000: 5 секунд. </p>

#include "stdafx.h"
#include <math.h>
#include <iostream>
using namespace std;
int main()
{
    double rt;
    for (int d = 2, n = 2; n < 100; d = 2, n++)
    {
        for (rt = sqrt(n); d < rt; d++)
            if (n % d == 0) break;
        if (d > rt) cout << n << " ";
    }
    getchar();  // 25 primes :-)
}

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

Я спросил автора: в вашей книге: "C ++ для E & S" это упражнение о простых числах, [xrcs] ... [/ xrcs]. Семь лет назад его спросили по адресу: SO / q / 5200879
Несколько дней назад я дал ответ: SO / a / 49199435
Как вы думаете, это разумное решение или, возможно, решение.

Он ответил: Питер, я никогда не имею в виду конкретного решения когда я составляю упражнения,
поэтому я не могу сказать, что я имел в виду ваше точное решение. Радость C ++ в том, что можно придумать действительно креативные решения и отличный код, как, на первый взгляд, похоже, что вы сделали.
Спасибо за отправку!
Доктор Бронсон

Я пошел к https://youtu.be/1175axY2Vvw

PS. Сито: https://pastebin.com/JMdTxbeJ

...