您的位置:首页 > 其它

唯一分解定理(算术基本定理)

2017-08-04 13:37 253 查看
定义:任何一个大于1的自然数

 

 
,都可以唯一分解成有限个质数的乘积

 

 
,这里

 

 
均为质数,其诸指数

 

 
是正整数。——百科

我们知道了唯一分解定理后有什么用呢

应用一:N的因子个数就为

 

应用二:N的因子和为 


对N进行分解时我们要先打个素数表打到√N就够了,然后用试除法来枚举N的因子,时间复杂度为O(√N)

const int maxn=1000005;
bool vis[11000001];
int vis1[1000001];
long long prim[maxn],an[maxn];
int p;
void getprim()//素数打表
{
memset(vis,true,sizeof(vis));
long long t=0;
for(int i=2; i<=11000001; i++)
{
if(vis[i])
prim[t++]=i;
for(int j=0; j<t&&prim[j]*i<=11000001; j++)
{
vis[i*prim[j]]=false;
if(i%prim[j]==0)
break;
}
}
}
void phi(long long n)
{
long long sum=1,ans,m;
m=n;
p=0;
for(int i=0; prim[i]*prim[i]<=n; i++)//试除法找因子
{
if(n%prim[i]==0)
{
ans=0;
while(n%prim[i]==0)
{
ans++;
n/=prim[i];
}
an[p++]=ans;//an数组存的是指数
}
}
if(n>1)//若因子都找完了要么是1,要么他本身是质数
{
ans=0;
while(m%n==0)
{
ans++;
m/=n;
}
an[p++]=ans;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: