分解质因数——试除法
思路:从小到大枚举所有数(尝试x的所有因数)
概念:把一个合数分解成若干个质因数的乘积的形式,即求质因数的过程叫做分解质因数。
模版1
#include<iostream>
#include<algorithm>
#include<string>
#define int long long
using namespace std;
int m[10000000];//ϱê´ú±íÖÊÒò×ӵĵ×Êý£¬Êý×éÖеÄÖµ´ú±íÖÊÒò×ÓµÄÖ¸Êý
int a;
void asd(int x)
{
for(int i=2;i*i<=x;i++)
{
while(x%i==0)
{
x=x/i;
m[i]++;
}
}
if(x>1)
m[x]++;
}
signed main()
{
cin>>a;
asd(a);
for(int i=1;i<=a;i++)
{
if(m[i])
cout<<i<<" "<<m[i]<<endl;
}
return 0;
}
模版2
#include<iostream>
#include<algorithm>
#include<cmath>
#include<string>
#include<map>
#define int long long
using namespace std;
int a[10000],b[10000],cnt=0,n;
void asd(int x)
{
for(int i=2;i*i<=x;i++)
{
if(x%i==0)
cnt++;
while(x%i==0)
{
a[cnt]=i;//存的是质因子的底数
b[cnt]++;//存的是质因子的指数
x=x/i;
}
}
if(x>1)
{
cnt++;
a[cnt]=x;
b[cnt]++;
}
}
signed main()
{
cin>>n;
asd(n);
for(int i=1;i<=cnt;i++)
{
cout<<a[i]<<" "<<b[i]<<endl;
}
return 0;
}
代码时间复杂度最快是O(logn)
最慢是O()