Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
打印从1到100的素数 这个C++代码打印出下列素数: 3 5 7 7 13 17 17 19 29 31 37 37 41 37αxα>_C++_C_Algorithm_Primes - Fatal编程技术网

打印从1到100的素数 这个C++代码打印出下列素数: 3 5 7 7 13 17 17 19 29 31 37 37 41 37αxα>

打印从1到100的素数 这个C++代码打印出下列素数: 3 5 7 7 13 17 17 19 29 31 37 37 41 37αxα>,c++,c,algorithm,primes,C++,C,Algorithm,Primes,但我认为我的书不希望这样写。它提到了一个数字的平方根。因此,我尝试将我的第二个循环改为for(int j=2;j如果一个数字有除数,那么其中至少有一个必须小于或等于该数字的平方根。当你检查除数时,你只需要检查到平方根,而不需要一直检查到被测试的数字。如果j等于sqrt(I)它也可能是一个有效的因素,不仅仅是如果它更小的话 要在内部循环中迭代并包括sqrt(i),您可以编写: for (int j=2; j*j<=i; j++) for(int j=2;j*j将for循环更改为for(in

但我认为我的书不希望这样写。它提到了一个数字的平方根。因此,我尝试将我的第二个循环改为
for(int j=2;j如果一个数字有除数,那么其中至少有一个必须小于或等于该数字的平方根。当你检查除数时,你只需要检查到平方根,而不需要一直检查到被测试的数字。

如果
j
等于
sqrt(I)
它也可能是一个有效的因素,不仅仅是如果它更小的话

要在内部循环中迭代并包括
sqrt(i)
,您可以编写:

for (int j=2; j*j<=i; j++)

for(int j=2;j*j将for循环更改为
for(int j=2;j我用以下代码检查一个数字是否为素数(当然使用sqrt):

bool IsPrime(常量无符号整数x)
{
常量无符号整数TOP
=静态_cast(
标准::sqrt(静态(x))
) + 1;
for(int i=2;i!=TOP;++i)
{
如果(x%i==0)返回false;
}
返回true;
}
我使用此方法确定素数:

#include <iostream>

using std::cout;
using std::cin;
using std::endl;

#include <cmath>

void initialize( unsigned int *, const unsigned int );
void show_list( const unsigned int *, const unsigned int );
void criba( unsigned int *, const unsigned int );
void setItem ( unsigned int *, const unsigned int, const unsigned int );

bool IsPrime(const unsigned int x)
{
  const unsigned int TOP
  = static_cast<int>(
      std::sqrt( static_cast<double>( x ) )
    ) + 1;

  for ( int i=2; i != TOP; ++i )
  {
    if (x % i == 0) return false;
  }
  return true;
}

int main()
{

    unsigned int *l;
    unsigned int n;

    cout << "Ingrese tope de criba" << endl;
    cin >> n;

    l = new unsigned int[n];

    initialize( l, n );

    cout << "Esta es la lista" << endl;
    show_list( l, n );

    criba( l, n );  

    cout << "Estos son los primos" << endl;
    show_list( l, n );
}

void initialize( unsigned int *l, const unsigned int n)
{
    for( int i = 0; i < n - 1; i++ )
        *( l + i ) = i + 2;
}

void show_list( const unsigned int *l, const unsigned int n)
{
    for( int i = 0; i < n - 1; i++ )
    {
        if( *( l + i ) != 0)
            cout << l[i] << " - ";
    }
    cout << endl;
}

void setItem( unsigned int *l, const unsigned int n, const unsigned int p)
{
    unsigned int i = 2;
    while( p * i <= n)
    {
        *( l + (i * p - 2) ) = 0;
        i++;
    }
}

void criba( unsigned int *l, const unsigned int n)
{
    for( int i = 0;  i * i <= n ; i++ )
     if( IsPrime ( *( l + i) ) )
        setItem( l, n, *(l + i) );      
}
#包括
使用std::cout;
使用std::cin;
使用std::endl;
#包括
无效初始化(无符号整数*,常量无符号整数);
无效显示列表(常量无符号整数*,常量无符号整数);
void criba(无符号整数*,常量无符号整数);
void setItem(unsigned int*,const unsigned int,const unsigned int);
bool IsPrime(常量无符号整数x)
{
常量无符号整数TOP
=静态_cast(
标准::sqrt(静态(x))
) + 1;
for(int i=2;i!=TOP;++i)
{
如果(x%i==0)返回false;
}
返回true;
}
int main()
{
无符号整数*l;
无符号整数n;
cout n;
l=新的无符号整数[n];
初始化(l,n);
cout3种方式:

一,

int main()
{

对于(inti=2;i,使用可整除性规则可以在O(n)中找到素数,这是非常有效的

解决方案将基于数字的各个数字…

\include
#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<<", ";
    }
}
使用名称空间std; void main() { int num,i,j,prime; 库特南;
实际上,更好的解决方案是使用“素数筛或素数筛”,这是一种“寻找素数的快速算法”

这种简单(但不是更快)的算法被称为“埃拉托斯坦筛”,可以通过以下步骤完成(再次来自维基百科):

  • 创建从2到n的连续整数列表:(2,3,4,…,n)
  • 首先,让p等于2,第一个素数
  • 从p开始,以p的增量进行计数,并在列表中标记每个大于p本身的数字。这些数字将 2p、3p、4p等;注意其中一些可能已经标记
  • 在列表中找到第一个未标记的大于p的数字。如果没有这样的数字,请停止。否则,让p等于 此数字(下一个素数)并从步骤3开始重复
  • 找到高达100的素数特别容易:

        printf("2 3 ");                        // first two primes are 2 and 3
        int m5 = 25, m7 = 49, i = 5, d = 4;
        for( ; i < 25; i += (d=6-d) )
        {
            printf("%d ", i);                  // all 6-coprimes below 5*5 are prime
        }
        for( ; i < 49; i += (d=6-d) )
        {
            if( i != m5) printf("%d ", i);
            if( m5 <= i ) m5 += 10;            // no multiples of 5 below 7*7 allowed!
        }
        for( ; i < 100; i += (d=6-d) )         // from 49 to 100,
        {
            if( i != m5 && i != m7) printf("%d ", i);
            if( m5 <= i ) m5 += 10;            //   sieve by multiples of 5,
            if( m7 <= i ) m7 += 14;            //                       and 7, too
        }
    
    printf(“23”);//前两个素数是2和3
    int m5=25,m7=49,i=5,d=4;
    对于(;i<25;i+=(d=6-d))
    {
    printf(“%d”,i);//5*5以下的所有6-素数都是素数
    }
    对于(;i<49;i+=(d=6-d))
    {
    如果(i!=m5)printf(“%d”,i);
    
    如果(M5< P>这是我非常简单的C++程序,可以在2到100之间列出素数。< /P>
    for(int j=2;j<=100;++j)
    {
        int i=2;
        for(;i<=j-1;i++)
        {
            if(j%i == 0)
                break;
        }
    
        if(i==j && i != 2)
            cout<<j<<endl;
    }
    

    for(int j=2;j这里是我对埃拉托斯烯筛的实现(对于2&n之间的素数)

    #包括
    int main(){
    int n=0;
    std::cout>n;
    std::cout
    #包括“stdafx.h”
    #包括
    使用名称空间std;
    void main()
    {int f=0;
    
    对于(inti=2;i这是我从一个简单的博客中得出的方法:

    //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;
    
            }
     }
    }
    }
    
    C++中的代码> /素数生成 //用于循环和条件结构 #包括 使用名称空间std; int main() { int a=2;//从2开始 long int b=1000;//在1000处结束 对于(inti=a;i试试这个。 这很容易,没有任何额外的内置功能

    #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);
    }
    
    #包括
    整数素数(整数n,整数r){
    对于(int i=2;n我总是使用这个(它既简单又快速):

    #包括
    使用名称空间std;
    int i,j;
    布尔b[101];
    int main()
    {
    
    对于(i=2;i查找no.是否为素数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;
    }
    
    #包括
    #包括
    使用名称空间std;
    int main(){
    int n,计数器=0;
    cout n;
    
    对于(int i=2;i我是根据ProdigySim第二种方法最流行的答案用perl实现的。我必须在perl中添加一个
    break
    等价物,
    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;
            }
        }
    
    }
    
    #!/bin/perl
    严格使用;
    对于(我的$i=2;$i<100;$i++){
    我的$prime=1;
    对于(my$j=2;$j*$j一个简单的打印“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;
        }
    
    #包括
    使用名称空间std;
    int main()
    {
    int N;
    cin>>N;
    对于(int i=2;N>0;++i)
    {
    bool isPrime=true;
    对于(int j=2;jcout这是一个简单的代码,用于打印所有素数直到给定的数字n

    #include<iostream.h>
    #include<conio.h>
    
    void main()
    {
    clrscr();
    int n,i,j,k;
    cout<<"Enter n\n";
    cin>>n;
    
    for(i=1;i<=n;i++)
    {   k=0;
      for(j=1;j<=i;j++)
      {
        if((i%j)==0)
        k++;
       }
      if(k==2)
      cout<<i<<endl;
    }
    getch();
    }
    
    #包括
    #包括
    void main()
    {
    clrsc();
    int n,i,j,k;
    coutn;
    对于(i=1;i使用逻辑,我能够以更快的速度获得相同的结果

    VS

    比较
    计数
    , 我的代码完成任务所需的迭代次数明显减少。最后检查不同
    N
    值的结果

    为什么此代码比
    #include <iostream>
    
    int main (){
    int n=0;
    std::cout << "n = ";
    std::cin >> n;
    std::cout << std::endl;
    
    if (n==0 || n==1){
        std::cout << "No primes in this range" << std::endl;
        return 0;
    }
    
    
    const int array_len = n-2+1;
    
    int the_int_array[array_len];
    for (int counter=2; counter <=n; counter++)
        the_int_array[counter-2]=counter;
    
    
    int runner = 0;
    int new_runner = 0;
    
    while (runner < array_len ){
        if (the_int_array[runner]!=0){
            new_runner = runner;
            new_runner = new_runner + the_int_array[runner];
    
            while (new_runner < array_len){
               the_int_array[new_runner] = 0;
               new_runner = (new_runner + the_int_array[runner]);
            }
        }
    runner++;
    }
    
    runner = 0;
    
    while (runner < array_len ){
        if (the_int_array[runner]!=0)
            std::cout << the_int_array[runner] << " ";
        runner++;
    }
    
    std::cout << std::endl;
    return 0;
    
    #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");
    }
    
    //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;
    
            }
     }
    }
    }
    
    #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);
    }
    
    #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;
            }
        }
    }
    
    #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;
    }
    
    #!/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;
            }
        }
    
    }
    
        #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;
        }
    
    #include<iostream.h>
    #include<conio.h>
    
    void main()
    {
    clrscr();
    int n,i,j,k;
    cout<<"Enter n\n";
    cin>>n;
    
    for(i=1;i<=n;i++)
    {   k=0;
      for(j=1;j<=i;j++)
      {
        if((i%j)==0)
        k++;
       }
      if(k==2)
      cout<<i<<endl;
    }
    getch();
    }
    
    int N = 1000; //Print primes number from 1 to N
    vector<bool> primes(N, true);
    for(int i = 3; i*i < N; i += 2){    //Jump of 2
        for(int j = 3; j*i < N; j+=2){  //Again, jump of 2
            primes[j*i] = false;
        }
    }
    if(N >= 2) cout << "2 ";
    for(int i = 3; i < N; i+=2){        //Again, jump of 2
        if(primes[i] == true) cout << i << " "; 
    }
    
    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.
    
    #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 :-)
    }