#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;
}
通常這樣的題目都先嘗試極限測資: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)
程式碼部分如果可以讓人快速知道建議可以寫一些註解說明你的作法或是這個函數的目的是什麼