它运行完美,但当数字为 6 位或更多时,它会“崩溃”。我不知道为什么它不起作用。我也没有尝试很多方法来修复它,因为我没有从哪里开始。我知道,测试有一些弱点,我已经做了一些研究。有一些数字不能被测试检测到,但是当你提高准确性时应该将它们过滤掉
bool testPrime(int primenumber_1)
{
bool even_number_checker = false;
bool prime;
int counter = 0;
int primenumber_mod = 0;
int variable_1 = 1;
int variable_2 = 1;
primenumber_mod = primenumber_1 - 1;
if(primenumber_1 % 2 == 0) return false;
while(primenumber_mod%2 == 0)
{
primenumber_mod/=2;
}
if(even_number_checker == false && primenumber_1 != 43405 && primenumber_1 != 27905)
{
variable_1 = (int)pow(2, primenumber_mod) % primenumber_1;
if(variable_1 != 1 && variable_1 != -1)
{
while(variable_1 + 1 != primenumber_1 &&
variable_1 - 1 != primenumber_1 &&
variable_2 + 1 != primenumber_1 &&
variable_2 -1 != primenumber_1)
{
if(counter >= 40) break;
variable_2 = (int)pow(variable_1, 2) % primenumber_1;
variable_1 = variable_2;
counter++;
}
prime = (variable_1 + 1 == primenumber_1 ||
variable_2 + 1 == primenumber_1);
}
}
return prime;
}
int primeGenerator()
{
int number = rand()%999900+100000;
while(!testPrime(number))
{
number = rand()%899000+100000;
}
return number;
}
bool testPrimeSafe(int number)
{
for(int i = 2; i < number; i++)
{
if(number % i == 0)
{
return false;
}
}
return true;
}
void testTestPrime()
{
for(int i = 0; i < 10000; i++)
{
int prime = primeGenerator();
if(testPrimeSafe(prime))
{
std::cout << "\e[32;42mSUCCESS :: " << prime << "\e[0m\n";
}
else
{
std::cout << "\e[48;5;196;1m*EVIL MORTY THEME PLAYING* :: " << prime << "\e[0m\n";
}
}
}
int main()
{
srand(time(NULL));
testTestPrime();
}
如果大于 31,那么(int)pow(2, primenumber_mod)
将溢出一个有符号的 32 位整数。如果输入是一个 6 位整数,它很可能会比这大得多。primenumber_mod
primenumber_mod
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句