AW197 階乘分解

題目地址


算法原理:


#include<cstdio>
#include<iostream>
using namespace std;
const int MAXN=1e6;
int primes[MAXN],primeCnt=0;
bool notPrime[2*MAXN];
void initPrime(int x){
	for(int i=2;i<=x;i++){
		if(notPrime[i])continue;
		for(int j=2;j<=x/i;j++){
			notPrime[i*j]=1;
		}
	}
	for(int i=2;i<=x;i++)
		if(!notPrime[i])primes[++primeCnt]=i;
}
int ans[MAXN],ansValue[MAXN];
int main(){
	int n;
	scanf("%d",&n);
	initPrime(n);
	for(int i=1;i<=primeCnt;i++){
		int tmpN=n,nowPrime=primes[i],nowAns=0;
		while(tmpN){
			nowAns+=(tmpN/nowPrime);
			tmpN/=nowPrime;
		}
		printf("%d %d\n",nowPrime,nowAns);
	}
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章