我不知道为什么g ++不喜欢我的代码.它在java中运行良好.任何见解将不胜感激.
#include<iostream>
using namespace std;
bool isPrime(long number);
int main(){
const long number = 600851475143;
long max = 0;
for(long i= 0; i*i <= number; i++)
if(number % i == 0 && isPrime(i))
max = i;
cout<< max << endl;
return 0;
}
bool isPrime(long number){
if(number <= 1) return false;
if(number == 2) return true;
if(number % 2 == 0) return false;
for(long i= 3; i*i <= number; i+=2)
if(number % i == 0)
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
bil*_*llz 18
const long number = 600851475143;
Run Code Online (Sandbox Code Playgroud)
有溢出,长期不能容纳那么大的数字.
看到这个链接
LONG_MAX is 2147483647
Run Code Online (Sandbox Code Playgroud)
尝试:
const unsigned long long number = 600851475143;
unsigned long longmax = 0;
Run Code Online (Sandbox Code Playgroud)
编辑:
你不能%对抗0,i从...开始0
for(long i= 0; i*i <= number; i++)
^^
{
if(number % i == 0 && isPrime(i))
^^^
{
max = i;
cout<< max << endl;
}
Run Code Online (Sandbox Code Playgroud)
}
对工作版本的轻微更改:
bool isPrime(unsigned long long number);
int main(){
const unsigned long long number = 600851475143;
unsigned long long max = 0;
for(long i = 1; i*i <= number; i++)
{
if(number % i == 0 && isPrime(i))
{
max = i;
cout<< max << endl;
}
}
return 0;
}
bool isPrime(unsigned long long number)
{
if(number <= 1) return false;
if(number == 2) return true;
if(number % 2 == 0) return false;
for(unsigned long long i= 3; i*i <= number; i+=2)
{
if(number % i == 0)
{
return false;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)