我被要求分解一個數字並以特定的方式顯示它。如何分解數字?
例如:100 = 2^2 * 5^2
這是我與沒有骰子迄今所使用的C++代碼,不幸的是:
#include <stdio.h>
#include <math.h>
//IsPrime indicates whether a given number is or is not prime.
bool IsPrime(long long n)
{
int j = 3;
if (n == 2)
{
return true;
}
else if (n % 2 == 0)
{
return false;
}
else
{
for (j = 3; j <= sqrt(n); j += 2)
{
if (n%j == 0)
{
return false;
}
}
}
return true;
}
int main(void)
{
long long n_orig,n, i=3 , primecount=0;
scanf("%lld", &n_orig);
n = n_orig;
if (n == 1)
{
printf("1");
return 0;
}
if (IsPrime(n))
{
printf("%lld", n);
return 0;
}
if (n % 2 == 0)
{
while (n >= 2 && n % 2 == 0)
{
primecount++;
n = n/2;
}
if (primecount == 1)
{
printf("2*");
}
else
{
printf("2^%lld*", primecount);
}
}
primecount = 0;
n = n_orig;
while (i <= n/2)
{
if (IsPrime(i))
{
while (n >= i && n % i == 0)
{
primecount++;
n = n/i;
}
}
n = n_orig;
if (primecount == 0)
{
i++;
continue;
}
if (primecount == 1)
{
printf("%lld*", i);
}
else
{
printf("%lld^%lld*", i, primecount);
}
primecount = 0;
i+=2;
}
printf("\b");
return 0;
}
使用這個代碼我能夠生成一些測試用例,但是當我將我的答案上傳到可能評估代碼的網站時,在7個測試用例中(我不知道它們究竟是什麼),我通過3,失敗3和超過時間限制(在問題中甚至沒有聲明)在一個案例中。我真的很感激一些幫助,請小老虎友好!
此外,我並不想知道我的答案是否可以在某種程度上得到改善,我現在的首要任務是理解爲什麼我自己的代碼無法按預期工作。
P.S:的iostream和陣列 S的用法是不允許的。
在此先感謝。
你有沒有通過您的代碼加強與執行過程中的調試器? – CoryKramer
1是素數? 0是一個素數? – gnasher729
你多久打一次sqrt函數? – gnasher729