[英]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;
}
在您的版本中,調用cout
時i
不存在。
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.