打印从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 :-)
}