那我建表為什麼會錯?一開始沒建表還會 TLE 嗚嗚
那我建表為什麼會錯?一開始沒建表還會 TLE 嗚嗚
應該是-231到231吧
這題時間有3秒,我覺得很夠用了,不需要建表,一個一個檢查是否是因數就能AC了
#include <iostream>
using namespace std;
int main()
{
int n;
while (cin >> n && n != 0)
{
cout << n << " = ";
if (n < 0)
{
cout << "-1 x ";
n *= -1;
}
if (n % 2 == 0)
{
while (n % 2 == 0)
{
n /= 2;
cout << 2;
if (n != 1)
{
cout << " x ";
}
}
}
for (int i = 3; i <= n; i++)
{
if (n % i == 0)
{
while (n % i == 0)
{
n /= i;
cout << i;
if (n != 1)
{
cout << " x ";
}
}
}
}
cout << '\n';
}
return 0;
}
仍然是 TLE 有時間的話請幫我感恩
for (int i = 3; i <= n; i++)
不需要算到n,只要到平方根就好了,可以用內建的sqrt()
#include <iostream>#include <cmath>using namespace std;bool prime(long int n);int main(){long int n;while (cin >> n && n != 0){cout << n << " = ";if (n < 0){cout << "-1 x ";n *= -1;}if (prime(n)){cout << n << '\n';}else{if (n % 2 == 0){while (n % 2 == 0){n /= 2;cout << 2;if (n != 1)cout << " x ";elsecout << '\n';}}for (int i = 3; i <= n; i+=2){while (n % i == 0){n /= i;cout << i;if (n != 1)cout << " x ";elsecout << '\n';}}}}return 0;}bool prime(long int n){if (n == 2)return true;else if (n % 2 == 0)return false;else{for (int i = 3; i <= int(sqrt(n)); i+=2){if (n % i == 0)return false;}return true;}}我打算先判斷質數,剩下的再解決,雖然還是沒有用你說的 sqrt() 因為我不清楚怎麼寫比較快不過仍然是超時Q_Q 請大神指點
#include#includeusing namespace std;bool prime(long int n);int main(){long int n;while (cin >> n && n != 0){cout << n << " = ";if (n < 0){cout << "-1 x ";n *= -1;}if (prime(n)){cout << n << '\n';}else{if (n % 2 == 0){while (n % 2 == 0){n /= 2;cout << 2;if (n != 1)cout << " x ";elsecout << '\n';}}for (int i = 3; i <= n; i+=2){while (n % i == 0){n /= i;cout << i;if (n != 1)cout << " x ";elsecout << '\n';}}}}return 0;}bool prime(long int n){if (n == 2)return true;else if (n % 2 == 0)return false;else{for (int i = 3; i <= int(sqrt(n)); i+=2){if (n % i == 0)return false;}return true;}}我打算先判斷質數,剩下的再解決,雖然還是沒有用你說的 sqrt() 因為我不清楚怎麼寫比較快不過仍然是超時Q_Q 請大神指點
你這樣判斷質數不會比較快,可以設一個變數s為sqrt(n),把for迴圈的i<=n改成i<=s,然後一旦找到因數,就重新計算s=sqrt(n),這樣迴圈跑的次數就會減少很多。最後迴圈跑完以後如果n不是1的話它也是一個因數