质因子分解

原理

∀N>1,若N不为素数,则有
质因子分解
其中p1<p2<…<pn均为素数,an均为正整数。

方法

枚举1~sqrt(n)范围内所有素数p,判断p是否为n的因子。是因子时,将该因子个数标记递增,并使n=n/p,直至不是因子为止。当上述步骤结束后,若n仍大于1,则n有且仅有一个大于sqrt(n)的因子,记录并加入数组即可。
枚举素数时首先要找出所有的素数,这里使用的是欧拉筛 点击查看素数筛

代码实现

#include<bits/stdc++.h>
using namespace std;

int ans[1000001];
int check[1000001];
int pri[100001];
int cnt;

void euler(int n)
{
	for(int i=2;i<=n;i++)
	{
		if(!check[i])
		pri[++cnt]=i;
		for(int j=1;pri[j]*i<=n;j++)
		{
			check[pri[j]*i]=1;
			if(i%pri[j]==0)
				break;
		}
	}
}

void division(int n)
{
	for(int i=2;i<=sqrt(n);i++)
	{
		while(n%i==0)
		{
			ans[++cnt]=i;
			n=n/i;
		}
	}
	if(n>1)
		ans[++cnt]=n;
}

int main()
{
	int n;
	scanf("%d",&n);
	euler(n);
	cnt=0;
	division(n); 
	for(int i=1;i<=cnt;i++)
		printf("%d ",ans[i]);
	return 0;
}
上一篇:python_rsa加密解密


下一篇:QT 子文件的建立(pri)