所以重点是让程序找到并列出1和你输入的数字之间的所有素数。我使用number_test作为测试素数,除数和除数的数字。
我不确定是什么问题,对我而言,它在功能上与此处发布的程序相同:Printing prime numbers from 1 through 100 稍微改动一下(输入一个数字,将“i”改为小于输入的数字)。
我一直在寻找过去的三四天,而且我没有找到任何能够完全回答这个问题的东西,达到我上课所需的程度。非常感谢任何帮助。
#include iostream
#include conio.h
using namespace std;
void main(void){
//Declare variables
int number_entered;
//Get inputs
cout << "This program lists all prime numbers from 1 through a positive number entered."
<< endl;
cout << "Please enter a positive integer."
<< endl;
cin >> number_entered;
cout << "Displaying all numbers from 1 to " << number_entered
<< endl
<< "Press any key to continue..."
<< endl;
getch();
for(int number_test = 2; number_test < number_entered; number_test++){
for(int divisor = 2; divisor < number_test; divisor++){
if(number_test % divisor == 0){
break;
}
else if(number_test % divisor != 0){
cout << number_test << " ";
break;
}
}
}
getch();
}
答案 0 :(得分:9)
你应该使用Eratosthenes的Sieve来计算小于 n 的素数。首先列出从2到最大所需素数 n 的所有数字。然后,在每个迭代步骤中,输出尚未考虑的最小剩余数,并将其所有倍数从列表中删除。
function primes(n)
sieve := makeArray(2..n, True)
for p from 2 to n step 1
if sieve(p)
output p
for i from p*p to n step p
sieve[i] := False
这个O(n log log n)算法非常快;你应该能够在不到一秒的时间内计算出不到一百万的78498素数。
答案 1 :(得分:2)
一个简单的C ++程序,用于查找“N”素数。
#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;
}
答案 2 :(得分:2)
只是一个小建议。由于素数是奇数,所以可以省略偶数。 例如,在下面的循环中,i和j增加2(i + = 2)而不是1(i ++)。
for (int i=3;i<=numberByUser; i+=2){
for (j=3;j<=i;j +=2){
if (i%j==0){
break;
}
}
答案 3 :(得分:1)
我认为在你的回答中任何一次循环终止(我正在谈论循环检查它是否是素数)一旦它出来你不知道它是否中断了。所以尝试制作一个标志变量并检查外部。我可以运行
for(n=lower+1; n<upper; n++)
{
prime = 1;
for(i=2; i<n; i++)
if(n%i == 0)
{
prime = 0;
break;
}
if(prime)
printf("\n\n\t\t\t%d", n);
}
答案 4 :(得分:0)
for(int number_test = 2; number_test < number_entered; number_test++){
for(int divisor = 2; divisor < number_test; divisor++){
if(number_test % divisor == 0){
break;
}
else if(number_test % divisor != 0){
cout << number_test << " ";
break;
}
}
}
上面的代码不会显示素数,它只会显示您输入的数字,当您遇到不是数字因子的除数时。例如,如果输入“9”,则从2开始,这不是9的因子,因此如果不是,则将“9”(错误地)显示为“素数”。
测试数字是否为素数的最简单方法是检查其平方根下面的所有素数,看它们是否是给定数字的因子。如果它们都不是(那么在给定数字之下的任何非素数都不是),则该数字是素数。如果它至少有一个素数因子小于或等于它的平方根,则它不是素数。
由于您希望显示[0,X]范围内的所有素数,您可以随时查看因子列表(或反向执行,这实际上是Eratosthenes的Sieve所做的)
答案 5 :(得分:0)
当我的观点与你的观点相似时,我写了这段代码,它有效。希望它会对你有所帮助。
#include <cstdio>
#include <vector>
using namespace std;
vector <int> sn;
bool isPrime(int n) {
if (n <= 1) {
return 0;
}
if (n == 2) {
return true;
}
if (!(n % 2)) {
return false;
}
for (int i = 2; i*i <= n; i++) {
if (!(n % i)) {
return 0;
}
}
return 1;
}
void primeNumbers(int k) {
sn.push_back (2);
int i = 3, j = 1;
for ( ; j < k + 1; i += 2 && j++) {
if (isPrime(i)) {
sn.push_back(i);
}
}
}
int main() {
int i, k;
scanf("%d", &k);
primeNumbers(k);
for (i = 0; i < sn.size(); i++) {
printf("%d ", sn[i]);
}
return 0;
}
答案 6 :(得分:0)
int getNumberOfPrimes(int N) {
bool *numbers = new bool[N-1]();
for (int i = 2; i <= N/2; ++i) {
if (numbers[i-2] == true) continue;
for (int j = i+i; j <= N; j = j+i) {
numbers[j-2] = true;
}
}
int count = 0;
for (int i = 0; i < (N-1); ++i) {
if (numbers[i] == false) ++count;
}
delete []numbers;
return(count);
}
答案 7 :(得分:0)
男人,我想我有最简单的方法。希望它适合你!
#include < iostream >
using namespace std;
int main()
{
int n, i, j
cin>>n; //The max limith
for(i=2; i<=2; i++)
{
for(j=1; j<=i/2; j++)
if(i%j!=o)
cout<<i;
}
return 0;
}
答案 8 :(得分:0)
如果数字有除数,则其中至少有一个必须小于或等于数字的平方根。当你检查除数时,你只需要检查平方根,而不是一直到被测试的数字。