之前质因子分解都写得比较挫,做了这道题发现质因子分解原来是还可以这样写,这个写法记录一下:
int main()
{
int T;
cin>>T;
while(T--)
{
int n;
cin>>n;
cout<<n<<"=";
int i=2,k=0;
while(i*i<=n)
{
if(n%i==0)
{
n/=i;
a[k++]=i;
i=1;
}
i++;
}
a[k++]=n;
for(int i=0;i<k;i++)
{
printf("%d%c",a[i],i==k-1?'\n':'*');
}
}
}
之前的写法需要优化一下才能过这道题:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <map>
#include <set>
#include <vector>
#include <queue>
using namespace std;
int ans[55];
int main()
{
int CASE;
scanf("%d", &CASE);
while(CASE--)
{
int n;
scanf("%d", &n);
int t = n;
int len = (int)sqrt(n * 1.0) + 1;
int cnt = 0;
if(n % 2 == 0)
{
while(n % 2 == 0)
{
ans[cnt++] = 2;
n /= 2;
}
}
for(int i = 3; i <= len; i += 2)
{
if(n % i == 0)
{
while(n % i == 0)
{
ans[cnt++] = i;
n /= i;
}
}
if(n == 1) break;
}
if(n != 1) ans[cnt++] = n;
printf("%d=", t);
for(int i = 0; i < cnt; ++i)
printf("%d%c", ans[i], i == cnt - 1 ? '\n' : '*');
}
return 0;
}
long long factor[100][2];
int fatCnt;
int getFactors(long long x)
{
fatCnt = 0;
long long tmp = x;
for(int i = 1; prime[i] <= tmp/prime[i];i++)
{
factor[fatCnt][1] = 0;
if(tmp%prime[i] == 0)
{
factor[fatCnt][0] = prime[i];
while(tmp%prime[i] == 0)
{
factor[fatCnt][1]++;
tmp /= prime[i];
}
fatCnt++;
}
}
if(tmp != 1)
{
factor[fatCnt][0] = tmp;
factor[fatCnt++][1] = 1;
}
return fatCnt;
}