阶乘分解

问题 A: 阶乘分解

时间限制: 1 Sec  内存限制: 128 MB

题目描述

给定整数N(1≤N≤10^6),试把阶乘N!分解质因数,按照算术基本定理的形式输出分解结果中的pi和ci即可。

 

输入

一个整数N。

 

输出

N! 分解质因数后的结果,共若干行,每行一对pi, ci,表示含有pi^ci项。按照pi从小到大的顺序输出。

 

样例输入

复制样例数据

5

样例输出

2 3
3 1
5 1

 

提示

5! = 120 = 2^3 * 3 * 5

筛素数,求<=N的所有素数出现的个数

/**/
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cctype>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <stack>
#include <queue>

typedef long long LL;
using namespace std;

int prim[80005], vis[1000005], n, tot;

void get_prim(int x){
	for (int i = 2; i <= x; i++){
		if(!vis[i]) prim[tot++] = i;
		for (int j = 0; j < tot && prim[j] * i <= x; j++){
			vis[prim[j] * i] = 1;
			if(i % prim[j] == 0) break;
		}
	}
}

int main()
{
	//freopen("in.txt", "r", stdin);
	//freopen("out.txt", "w", stdout);

	scanf("%d", &n);
	get_prim(n);
	for (int i = 0; i < tot; i++){
		LL t = prim[i]; //注意t可能超过int型
		LL ans = 0;// 同上
		while(t <= (LL)n){
			ans += n / t;
			t *= prim[i];
		}
		printf("%d %lld\n", prim[i], ans);
	}

	return 0;
}
/**/

 

全部评论

相关推荐

11-27 17:35
已编辑
蚌埠坦克学院 C++
深信服 后台开发 n×12
点赞 评论 收藏
分享
10-09 19:35
门头沟学院 Java
洛必不可达:java的竞争激烈程度是其他任何岗位的10到20倍
点赞 评论 收藏
分享
10-28 11:04
已编辑
美团_后端实习生(实习员工)
一个2人:我说几个点吧,你的实习经历写的让人觉得毫无含金量,你没有挖掘你需求里的 亮点, 让人觉得你不仅打杂还摆烂。然后你的简历太长了🤣你这个实习经历看完,估计没几个人愿意接着看下去, sdk, 索引这种东西单拎出来说太顶真了兄弟,好好优化下简历吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务