Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.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
C++ 数字3、5和7不显示为素数_C++_Algorithm_Math_Primes - Fatal编程技术网

C++ 数字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) ||

我需要创建一个函数,在两个输入数之间生成素数。我通过测试范围内每个数字的素性来做到这一点。问题是数字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) || (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;
国际委员会