最开始写了个这:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
bool flag = false;
int main() {
scanf("%lld", &n);
for (ll i = 2; i * i <= n; i++) {
if (n % i) continue;
ll tmp = 0;
while (!(n% i)) {
n /= i;
tmp++;
}
if (flag) printf(" * ");
else
flag = true;
printf("%d", i);
if (tmp > 1) printf("^%d", tmp);
}
if (n != 1) {
if (flag) printf(" * ");
printf("%d", n);
}
return 0;
}
然而,把代码改成这样:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
bool flag = false;
int main() {
scanf("%lld", &n);
if (n < 2LL) { // 没看清数据范围hhh,可忽略
printf("%lld\n", n);
return 0;
}
for (ll i = 2LL; i * i <= n; i++) {
if (n % i) continue;
ll tmp = 0LL;
while (!(n % i)) {
tmp++;
n /= i;
}
if (flag)
printf(" * ");
else
flag = true;
printf("%lld", i);
if (tmp > 1LL) printf("^%lld", tmp);
}
if (n != 1LL) {
if (flag) printf(" * ");
printf("%lld", n);
}
return 0;
}
求大佬解答原因QwQ