Sample Input
97532468
Sample Output
97532468=2^2*11*17*101*1291
思路:
int范围大概sqrt后是5e5,我打的表比较小但够了。
注意最后输入的数为素数时的情况,最后两个点就是素数和1.
代码
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;
#define endl '\n'
typedef long long ll;
ll a[100005];
void Prime()
{
a[1] = 1;
for (int i = 2; i <= 100000; ++i)
{
if (!a[i])
for (int j = 2 * i; j <= 100000; j += i)
{
a[j] = 1;
}
}
}
int main()
{
Prime();
ll n;
cin >> n;
cout << n << "=";
int f = 0;
ll m = n;
for (ll i = 1; i <= sqrt(m); ++i)
{
if (a[i] == 0 && n % i == 0)
{
if (f == 0) f = 1;
else cout << "*";
ll cnt = 0;
cout << i;
while (n % i == 0)
{
cnt++;
n /= i;
}
if (cnt > 1)
{
cout << "^" << cnt;
}
}
if(n == 1) break;
}
if (f == 0)
{
cout << n;
}
// getchar(); getchar();
return 0;
}