C++ 数字3、5和7不显示为素数
我需要创建一个函数,在两个输入数之间生成素数。我通过测试范围内每个数字的素性来做到这一点。问题是数字3、5或7从未显示。我不知道怎么了 这就是我测试数字素性的方法:C++ 数字3、5和7不显示为素数,c++,algorithm,math,primes,C++,Algorithm,Math,Primes,我需要创建一个函数,在两个输入数之间生成素数。我通过测试范围内每个数字的素性来做到这一点。问题是数字3、5或7从未显示。我不知道怎么了 这就是我测试数字素性的方法: bool isPrime(int number){ using namespace std; if((number%2==0) || (number%3==0) || (number%4==0) || (number%5==0) || (number%6==0) || (number%7==0) ||
bool isPrime(int number){
using namespace std;
if((number%2==0) || (number%3==0) || (number%4==0) || (number%5==0) ||
(number%6==0) || (number%7==0) || (number%8==0) || (number%9==0))
{
return false;
}
else if ((number/1==number) && (number/number==1))
{
return true;
}
}
一种非常简单(但并非非常有效)的方法:
bool是素数(inti)
{
int root=(int)std::sqrt(i);
布尔结果=真;
对于(int j=2;j一种非常简单(但并非非常有效)的方法:
bool是素数(inti)
{
int root=(int)std::sqrt(i);
布尔结果=真;
对于(int j=2;j3是3的倍数。5是5的倍数。7是7的倍数。您编写的代码对于3、5或7的任意倍数都返回false,因此对于这些数字,它不可能返回true。您只需要检查小于正在检查的数的素数的可除性
您还可以检查许多不必要的复合数的可除性;例如,一个数字不能是4的倍数而不是2的倍数,如果不是2和3的倍数,它也不能是6的倍数。这些检查除了浪费时间外,什么都做不了
最后,从长远来看,你的代码100%是错误的,因为它检查的最高素数是7。它会说169(13*13)是素数,因为它不能被你检查的任何数字整除,但它显然是复合的。对于试除法,你需要检查所有小于或等于下限的素数(sqrt(n)),或者通过对复合材料进行大量不必要的检查,或者在进行过程中建立一个素数列表(类似于埃拉托什尼筛,通常被称为CS类型,但我认为这不是严格等价的).3是3的倍数。5是5的倍数。7是7的倍数。您编写的代码对于3、5或7的任何倍数都返回false,因此这些数字不可能返回true。您只需要检查小于正在检查的数字的素数的可除性
您还可以检查许多不必要的复合数的可除性;例如,一个数字不能是4的倍数而不是2的倍数,如果不是2和3的倍数,它也不能是6的倍数。这些检查除了浪费时间外,什么都做不了
最后,从长远来看,你的代码100%是错误的,因为它检查的最高素数是7。它会说169(13*13)是素数,因为它不能被你检查的任何数字整除,但它显然是复合的。对于试除法,你需要检查所有小于或等于下限的素数(sqrt(n)),或者通过对复合材料进行大量不必要的检查,或者在运行过程中建立一个素数列表(类似于Eratosthenes筛,通常被CS类型称为,但我认为它不是严格等效的)。您可能想看看这篇文章
这是一种系统化的素数查找方法。使用此算法不断查找素数,直到达到输入的上限值。您可能想看看这篇文章
这是一种寻找素数的系统方法。使用此算法不断寻找素数,直到达到输入的上限值。请看这行代码:
if((number%2==0) || (number%3==0) ||
(number%4==0) || (number%5==0) ||
(number%6==0) || (number%7==0) ||
(number%8==0) || (number%9==0))
return false;
想想如果你插入2、3、5或7会发生什么。在每种情况下,你会发现数字mod 2、mod 3、mod 5或mod 7实际上是零,因此你的代码会返回false。这可能解释了为什么你得到的数字不作为素数计算
但现在来看下一句话:
else if ((number/1==number) && (number/number==1)){
return true;
}
在什么情况下这是错误的?每个被1除的数字都是自身,每个被自身除的数字都是1,因此每个数字都通过了此测试。因此,您的代码将在任何数字上返回true,只要它不可被2、3、4、5、6、7、8或9除。请尝试插入11 x 13=143。此数字不是素数,但您的函数将返回true说是的
其他人已经发布了其他解决问题的方法,但从根本上说,我认为问题在于,如果除1之外没有其他数字,那么一个数字就是素数,而它本身就是除数。你的函数可能需要考虑到这一点,可能是通过检查它下面不是一或它本身的所有数字。有可能进一步优化这个r、 正如一些答案所建议的,但你应该意识到,在基本层面上,这是需要做的
希望这有帮助!看看这行代码:
if((number%2==0) || (number%3==0) ||
(number%4==0) || (number%5==0) ||
(number%6==0) || (number%7==0) ||
(number%8==0) || (number%9==0))
return false;
想想如果你插入2、3、5或7会发生什么。在每种情况下,你会发现数字mod 2、mod 3、mod 5或mod 7实际上是零,因此你的代码会返回false。这可能解释了为什么你得到的数字不作为素数计算
但现在来看下一句话:
else if ((number/1==number) && (number/number==1)){
return true;
}
在什么情况下这是错误的?每个被1除的数字都是自身,每个被自身除的数字都是1,因此每个数字都通过了此测试。因此,您的代码将在任何数字上返回true,只要它不可被2、3、4、5、6、7、8或9除。请尝试插入11 x 13=143。此数字不是素数,但您的函数将返回true说是的
其他人已经发布了其他解决问题的方法,但从根本上说,我认为问题在于,如果除1之外没有其他数字,那么一个数字就是素数,而它本身就是除数。你的函数可能需要考虑到这一点,可能是通过检查它下面不是一或它本身的所有数字。有可能进一步优化这个r、 正如一些答案所建议的,但你应该意识到,在基本层面上,这是需要做的
希望这有帮助!或者您可以使用此算法:
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int main()
{
int num;
int count = 0;
cout << "Enter your range: ";
cin >> num;
for(int i = 1; i <= num; i++)
{
count = 0;
for(int j = 2; j <= sqrt(i); j++)
{
if(i % j == 0)
{
count++;
break;
}
}
if(count == 0 && i != 1)
cout << i << " ";
}
cout << endl;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
int-num;
整数计数=0;
cout>num;
对于(int i=1;i或您可以使用此算法:
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int main()
{
int num;
int count = 0;
cout << "Enter your range: ";
cin >> num;
for(int i = 1; i <= num; i++)
{
count = 0;
for(int j = 2; j <= sqrt(i); j++)
{
if(i % j == 0)
{
count++;
break;
}
}
if(count == 0 && i != 1)
cout << i << " ";
}
cout << endl;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
int-num;
国际委员会