c++ 埃氏筛法分解质因数

写到这里时我战战兢兢,因为我觉得没人会发这种无聊的文章了。

但是!

我决定还是再发一个(绝对不是为了骗阅读量和赞)

废话不多说,首先来看看什么是埃氏筛法

这是一种简单检定素数的算法。要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。(为了更直白,给大家放一张图像)

从图像中可以看到,该筛法先确定了质数,然后把它的所有倍数筛去,剩下的(1除外)就是质数

然后是这个题的要求(你可能觉得我油饼!但我们老师要求这样做!)

给定整数n,输入。

输出有若干行,每行有两个数,分别代表这个数所包含的质因数和包含的个数(从小到大顺序输出)

例如:540

           2 2

           3 3

           5 1

实现代码如下:

#include<bits/stdc++.h>
using namespace std;
int p[10000001],p1[10000001];
int main(){
	int n;
	cin>>n;
	p[1]=1;
	int ans=0;
	for(int i=2;i<10000001;i++){
		if(p[i]==1) continue;
		p1[++ans]=i;
		for(int j=2*i;j<=10000001;j+=i){
			p[j]=1;
		}
	}
	int cnt=0;
	for(int i=2;i<=n;i++){
		cnt=0; 
		while(n%p1[i]==0){
			n/=p1[i];
			cnt++;
		}
		if(cnt!=0){
			cout<<p1[i]<<" "<<cnt<<endl;
		}
	}
	return 0;
}

 完结撒花~!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值