Project Euler Question 3 Help

后端 未结 16 1390
攒了一身酷
攒了一身酷 2020-12-08 08:25

I\'m trying to work through Project Euler and I\'m hitting a barrier on problem 03. I have an algorithm that works for smaller numbers, but problem 3 uses a very, very large

16条回答
  •  甜味超标
    2020-12-08 08:58

    This solution on C++ took 3.7 ms on my Intel Quad Core i5 iMac (3.1 GHz)

    #include 
    #include 
    #include 
    
    using std::sqrt; using std::cin;
    using std::cout; using std::endl;
    
    long lpf(long n)
    {
      long start = (sqrt(n) + 2 % 2);
      if(start % 2 == 0) start++;
    
      for(long i = start; i != 2; i -= 2)
        {
          if(n % i == 0) //then i is a factor of n                                                
            {
              long j = 2L;
              do {
                  ++j;
                 }
              while(i % j != 0 && j <= i);
    
              if(j == i) //then i is a prime number                                           
                return i;
            }
        }
    }
    
    int main()
    {
      long n, ans;
      cout << "Please enter your number: ";
      cin >> n; //600851475143L                                                               
    
      time_t start, end;
      time(&start);
      int i;
      for(i = 0; i != 3000; ++i)
          ans = lpf(n);
      time(&end);
    
      cout << "The largest prime factor of your number is: " << ans << endl;
      cout << "Running time: " << 1000*difftime(end, start)/i << " ms." << endl;
    
      return 0;
    }
    

提交回复
热议问题