簡體   English   中英

歐拉計畫#3獲得數的最大素數

[英]Project Euler #3 Get largest prime factor of a number

因此,問題如下:

13195的素數是5、7、13和29。600851475143的最大素數是多少?

我為該問題編寫了一個代碼,該問題的邏輯和算法似乎正確,但似乎找不到錯誤,這里有代碼。

#include <iostream>

using namespace std;

int main()
{
    long int x = 600851475143;
    for(long int i=x-1; x%i; --i);
    cout << i;
    return 0;
}

RE:不知道“ i”的范圍,我學校的老師沒有告訴我=)[不怪他們]


RE:感謝您的所有答復,我得到了答案。 =)

有兩個小問題和一個大問題:

  • 您的i變量超出了打印范圍 -語句標題中聲明的變量范圍以語句本身結尾。 在這種情況下, i在分號后不可見,因此您需要在for之外聲明它
  • 您的變量可能不一定認為要投入到他們的價值觀 - long被允許是32位的,並且在許多平台上,它是。 要使其至少為64位類型,請將聲明更改為long long

解決這些問題后,您的代碼將被編譯。 但是,由於代碼的第三個大問題,運行代碼需要很長時間:您的算法太慢。

那呢? 只要聲明for的i outsude。

int main()
{
  long int x = 600851475143, i;
  for (i = x-1; x%i; --i);
  cout << i;
  return 0;
}

在您的版本中,調用couti不存在。

int main()
{
    long int x = 600851475143;    /* here i doesn't exist */
    for(long int i=x-1; x%i; --i) /* here i is declared */ ;
    /* the for is closed by ; so the scope of i is already closed */
    cout<<i;
    return 0;
}

但是,您的解決方案中還存在其他問題,如其他答案和評論所指出。

我是無法訪問外for循環。

long int i=0;
for(i= x-1;x%i;--i);
cout<<i<<endl;

至少以下代碼可正確編譯且沒有溢出問題:

#include <iostream>

using namespace std;

int main()
{
    unsigned long long x = 600851475143, i;
 // ^^^^^^^^ Note the unsigned!
    for(i= x-1;x%i;--i);
    cout<<i;
    return 0;
}

還有一個錯誤:

如果x是質數,則找不到答案。 i應該從相同的值開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM