【模板】——找出一个数的质因数

在网上找了好多方法,并没有什么特别的方法,就是遍历。

//先来一遍ola筛,筛出所有素数
const int N=3e7+1;
bool IsPrime[N];//真值为素数
int Prime[N],cnt;//存储的素数从下标1开始
vector<int>v;
void ola(int n) { //筛选到n
	memset(IsPrime,1,sizeof(IsPrime));//初始化
	//假设每个数都为素数
	IsPrime[1]=IsPrime[0]=0;
	for(int i=2; i<=n; i++) {
		if(IsPrime[i])//如果这个数没筛掉,那么将其加入素数序列
		{
			Prime[++cnt]=i;
		}
		for(int j=1; j<=cnt&&i*Prime[j]<=n; j++) {
			IsPrime[i*Prime[j]]=0;
			if(!i%Prime[j])
			break;
		}
	}
}
void primeFactor(int c)
{
	for(int i=1;Prime[i]*Prime[i]<=c;i++)
    {
        if(c%Prime[i]==0)
        {
            v.push_back(Prime[i]);
            while(c%Prime[i]==0)
            {
                c/=Prime[i];
            }
        }
    }
    if(c>1){
        v.push_back(c);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值