#17043: 請問 為什麼會RE


asddzxcc1856 (嚕踢)

學校 : 國立中興大學
編號 : 86097
來源 : [61.223.99.184]
最後登入時間 :
2023-08-21 21:25:52
d121. 00583 - Prime Factors -- UVa583 | From: [1.160.78.214] | 發表日期 : 2019-03-02 01:55

#include <iostream>
using namespace std;


int prime (int n);

int main()
{
int s[100005];
int max=0;
for (int i=1;i<=46341;i++)
{
if (prime(i)) s[max++]=i;
}

long long int n;
while (cin >> n)
{
if (n<0)
{
cout << n << " = -1 x ";
n=-n;
}
else if (n>0)
cout << n << " = ";
else if (n==0)
return 0;
for (int i=0;s[i]<=n;i++)
{
while (n%s[i]==0 && n/s[i]!=1)
{
cout << s[i] << " x ";
n/=s[i];
}
if (n/s[i]==1 && n%s[i]==0)
{
cout << s[i];
n/=s[i];
break;
}
}
cout << endl;
}
}

int prime (int n)
{
if (n<2) return 0;
for (int i=2;i<n;i++)
{
if (n%i==0) return 0;
}
return true;
}

 
#17045: Re:請問 為什麼會RE


rollfc (胖胖貓)

學校 : 國立清華大學
編號 : 81012
來源 : [36.229.55.205]
最後登入時間 :
2024-05-18 16:15:14
d121. 00583 - Prime Factors -- UVa583 | From: [140.113.136.219] | 發表日期 : 2019-03-02 17:09

通常這樣的題目都先嘗試極限測資:2147483647 / -2147483647

>>> for (int i=0;s[i]<=n;i++){...}

先說導致原因:你會儲存的質數範圍只能偵測到 46341 以內的質數,

換句話說 如果給定一個超過這個數值的質數就會爆開:比如說 n=46349 

確實判斷2^31次方以內時只要存 46341 以內的質數即可,但如果出現 46349 這類的數值出現時你再想想怎麼做

 

另外 ZJ的 Code 貼出來格式會跑掉建議去找個第三方的網站貼 Code (比如說:https://www.codepile.net/pile/VD5OEkbo)

程式碼部分如果可以讓人快速知道建議可以寫一些註解說明你的作法或是這個函數的目的是什麼

 
 
 
ZeroJudge Forum