pat-1059 Prime Factors (25分)

1059 Prime Factors (25分)
在这里插入图片描述

//质因子分解,里面涉及到了前面的素数判断 
#include <iostream>
#include <math.h>
using namespace std;
const int maxn=100010;
int prime[maxn],pNum=0;
//pNum:记录的位置索引上的素数 
//素数判断 
bool isPrime(int n){
	if(n<=1) return false;
	for(int i=2;i<=(int)sqrt(1.0*n);i++){
		if(n%i==0) return false;
	}
	return true;
}
//记录素数,素数放到里面,然后根据索引找到索引所对应的素数 
void find_Prime(){
	for(int i=1;i<maxn;i++){
		if(isPrime(i)==true){
			//记录数组下表从零开始,然后记录素数的顺序 
			prime[pNum++]=i;
		}
	}
}
//记录每个质因子,并且记录质因子出现的次数。
//开辟质因子数组,其实可以证明只要结构数组开辟到10就可以了 
struct factor{
	int x;//从小到大记录质因子 
	int time;//记录质因数出现的次数 
}fac[10]; 
//比如:9进行质因子分解,为3*3.那么x=3,time=2 
int main(){
	find_Prime();//务必要写,从一开始就把质因子的表的做好。算是缓存的作用 
	int n,num=0;
	cin>>n;
	if(n==1) cout<<"1=1";
	else{
		printf("%d=",n);
		for(int i=0;i<pNum&&prime[i]<=(int)sqrt(1.0*n);i++){	
			//说明能够除得尽,开始去记录质因子 
			if(n%prime[i]==0){
				fac[num].x=prime[i];
				fac[num].time=0;
				while(n%prime[i]==0){
					fac[num].time++;
					n/=prime[i];
				} 
				num++;
			} 
			if(n==1) break;
		}
		if(n!=1){
			fac[num].x=n;
			fac[num++].time=1;
		}
		for(int i=0;i<num;i++){
			if(i>0) cout<<"*";
			cout<<fac[i].x;
			if(fac[i].time>1) printf("^%d",fac[i].time);
		}
	}
	return 0; 
}

考察数论(素数和质因子),其实的知识讲解,请参考(写了一大半,呜呜呜,先留一个空,后面完整补上)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值