2014-02-19 2 views
0
#include<iostream> 
#include <time.h> 
#include <sys/timeb.h> 

using namespace std; 

bool IsPrime(unsigned long long n); 
unsigned long long pow2(unsigned n); 
unsigned long long Mersenne(unsigned n); 
unsigned long long Sqrt (unsigned long long n); 
bool LucasLehmer (unsigned long long n); 
double TIME (void); 

//------------------------------------------------------------ 
int main() 
{ 
     for (unsigned long long n = 1; n < 10; n++) 
     { 
      if (IsPrime(n)) 
       cout <<" IsPrime "<< endl; 
     } 
     return 0; 
} 
//------------------------------------------------------------ 

bool IsPrime(unsigned long long n) 
{ 
    if (n<= 2 || n%2==0) 
     return n==2 

    for (unsigned long long i=3; i<n; i+=2) 
    { 
     if (n%i==0) 
      return false; 
     else 
      return true; 
    } 
}; 
//------------------------------------------------------------ 

unsigned long long pow2(unsigned n) 
{ 
     unsigned long long ret= 1; 
     return ret<< n; 
} 
//------------------------------------------------------------ 

unsigned long long Mersenne(unsigned n) 
{ 
     return n-1; 
} 
//------------------------------------------------------------ 

unsigned long long sqrt (unsigned long long n) 
{ 
     return sqrt(n); 
} 
//------------------------------------------------------------ 

bool LucasLehmer (unsigned long long n) 
{ 
     if (n=2) 
      return true; 

     unsigned long long s=4; 
     const unsigned long long mp=Mersenne(n); 
     for (unsigned long long i=3; i=n; i=++); 
} 
//------------------------------------------------------------ 

unsigned long long Mersenne(unsigned n) 
{ 
    return n-1; 
} 
//------------------------------------------------------------ 

unsigned long long sqrt (unsigned long long n) 
{ 
     return sqrt(n); 
} 
//------------------------------------------------------------ 

bool LucasLehmer (unsigned long long n) 
{ 
     if (n=2) 
      return true; 
     unsigned long long s=4; 
     const unsigned long long mp=Mersenne(n); 
     for (unsigned long long i=3; i=n; i=++); 
} 
//------------------------------------------------------------ 

double TIME (void) 
{ 
     struct timeb t; 
     ftime(&t); 
     return (((1000.0 * t.time) + t.millitm)); 
} 

я получаю эти сообщения об ошибках, когда я скомпилировать код:Im пытаясь найти Мерсенна номера

error: expected initializer before ‘if’ 
if (n<= 2 || n%2==0) return n==2) 
error: ‘i’ does not name a type 
    for (unsigned long long i=3; i<n; i+=2) 
           ^
error: ‘i’ does not name a type 
    for (unsigned long long i=3; i<n; i+=2) 
            ^
error: expected primary-expression before ‘)’ token 
    for (unsigned long long i=3; i=n; i=++); 
            ^

Я только начал принимать этот класс, и это мое первое задание, любая помощь будет принята с благодарностью ,

* Я использую GNU GCC компилятор

+1

Downvotes? Пошли, они только что отправили свою первую попытку! –

+0

IsPrime не имеет начального '{' (и соответствующего конца). –

+1

@ DanielEarwicker: Я не знал, что Stack Overflow был местом для «первых попыток». –

ответ

2

Вы писали во многих местах if(n=2). Вам нужны if(n==2)

2

Вы отсутствуете скобки до определения IsPrime:

bool IsPrime(unsigned long long n) 
{ 
if ((n<= 2 || n%2==0) return n==2;) 
    for (unsigned long long i=3; i<n; i+=2) 
     { 
     if (n%i==0) 
      return false; 
     else 
      return true; 
     }; 
} 
+0

В функции 'bool IsPrime (long long unsigned int)': error: expected ';' before ')' token if (n <= 2 || n% 2 == 0) return n == 2); ^Ошибка: ожидаемое первичное выражение перед ')' токен error: expected ';' before ')' token В функции 'bool LucasLehmer (long long unsigned int)': ошибка: ожидаемое первичное выражение перед '). 'token for (unsigned long long i = 3; i = n; i = ++); ^ Я внес изменения, которые вы предложили, и я получил это от любых предложений .... – user3327202

+0

Отредактировав код, повторите попытку. – nikpel7

1
bool IsPrime(unsigned long long n) 
{ 
    if (n%2==0) 
     return false; 
    for (unsigned long long i=3; i<n; i+=2) 
     { 
     if (n%i==0) 
      return false; 
     } 
    return true; 
} 

Вашего метод IsPrime имеет некоторые ошибки. для n = 1 он должен быть простым в соответствии с вашим кодом. Я изменил эту часть.

1

IsPrime отсутствует брекеты вокруг тела.

Первая линия isPrime заканчивается ), который должен быть ;

Вы используете оператор присваивания, =, для сравнения.

Эта линия нонсенс, и это невозможно предложить поправку:

for (unsigned long long i=3; i=n; i=++); 

Если вы написали

for (unsigned long long i=3; i=n; i++); 

было бы синтаксически правильно, но все равно бессмысленно - это либо ничего не делает навсегда или отнюдь не в зависимости от значения n.

Смежные вопросы