Factorial Factors

来源:互联网 发布:数控车大螺距螺纹编程 编辑:程序博客网 时间:2024/06/05 00:09
/**
题目:Factorial Factors
链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=79877#problem/F
题意:输出N!的不同的素数的个数,以及素数约数的总个数;
思路:找N!不同素数约数的个数,即找出1到N素数的个数,可以通过筛法处理,同时可以记录非素数对应的最大素数约束,然后用该数除以最大素数约束,求出得到的数的对应素数约数个数(这个个数实际在之前计算出了)然后加一便是该数的对应最少的可以分解成多少素数的约数。
**/
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int vis[100100], cnt[100100];int main(){int T;scanf("%d", &T);while (T--){int n;scanf("%d", &n);memset(vis, 0, sizeof vis);memset(cnt, 0, sizeof cnt);int maxn = 0;for (int i = 2; i <= n; i++)if (!vis[i]){maxn++;cnt[i] = 1;for (int j = i+i; j <= n; j += i){cnt[j] = 1 + cnt[j/i];vis[j] = 1;}}int ans = 0;for (int i = 0; i <= n; i++) ans += cnt[i];printf("%d %d\n", maxn, ans);}return 0;}


0 0