求讲解代码(学术无人)
  • 板块灌水区
  • 楼主ALANYUEHNV
  • 当前回复14
  • 已保存回复14
  • 发布时间2022/3/22 17:17
  • 上次更新2023/10/28 05:56:22
查看原帖
求讲解代码(学术无人)
688779
ALANYUEHNV楼主2022/3/22 17:17

第4题 阶乘因子(yinzi) 时限:1s 空间:256m Description

桐桐刚刚学习了自然数N的阶乘(N!):被定义成从1到N的所有整数的乘积。例如5!=54321=120,随着数N的增大,N!增长的非常快,5!=120,10!=3628800。桐桐想到了一种方法来列举那么大的数:不是直接列出该数,而是按照顺序列举出该数中各个质数因子出现的次数,如825可描述为(0 1 2 0 1),意思是对825分解质因数,这些质数因子中有0个2,1个3,2个5,0个7,1个11。请你编一个程序,读入N值,帮助桐桐按顺序输出N!所包含的质数因子的个数。

Input

只包含1个数N(2<=N<=100000)

Output

一个N!中所包含的质数因子的个数(从最小的质数开始)的序列,数与数之间用一个空格隔开。

Sample Input

53

Sample Output

49 23 12 8 4 4 3 2 2 1 1 1 1 1 1 1

#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cstring>
using namespace std;
int n,a[100005],p[100005],tmp;
int main() {
	scanf("%d", &n);
	for(int i = 4; i <= n; i += 2) {
		tmp = i;
		while(!(tmp & 1)) tmp/=2, a[2]++;
		p[i] = 1;
	}
	printf("%d", a[2] + 1);
	for(int i = 3; i <= n; i += 2) {
		if(p[i]) continue;
		for(int j = i + i; j <= n; j += i) {
			tmp = j;
			while(!(tmp % i)) tmp /= i, ++a[i];
			p[j] = 1;
		}
		printf(" %d", a[i] + 1);
	}
	return 0;
}
2022/3/22 17:17
加载中...