Soldier and Number Game---cf546D(打表求n的素因子个数)
2024-10-20 08:38:37
题目链接:http://codeforces.com/problemset/problem/546/D
题意:
给出一个n,n开始是a!/b!,每次用一个x去整除n得到新的n,最后当n变成1的时候经过了几轮得分就是这个轮数,要求最大的分数是多少 思路:
很明显,就是一个求整数质因子个数的题目,阶乘我们不需要算,我们知道在a>b的时候,b!都约掉了,那么我们只需压迫计算出每个数的质因数有几个,然后计算出1~n的质因子之和,那么就可以迅速得到答案了
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define N 5000005
using namespace std;
typedef long long LL; int sum[N], f[N];///f[i]代表i的素数因子有多少个; void make()
{
for(int i=; i<N; i++)
{
if(!f[i])///当i是素数时;那么i的倍数都含有i这个素因子;所以到f[j]=f[j/i]+1;
for(int j=i; j<N; j+=i)
{
f[j] = f[j/i] + ;
}
}
for(int i=; i<N; i++)///sum[i]表示1--i以内的每个数的因子总和;
sum[i]=sum[i-]+f[i];
} int main()
{
make();
int T, a, b;
scanf("%d", &T);
while(T--)
{
scanf("%d %d", &a, &b);
printf("%d\n", sum[a]-sum[b]);
}
return ;
}
最新文章
- Spring框架学习(一)
- 【nodejs笔记——小知识点汇总】
- Visual Studio+TFS--强大的项目管理工具
- PHP之:随机抽取一个数&;&;随机函数
- GBDT基本理论及利用GBDT组合特征的具体方法(收集的资料)
- Python积木之with
- sublime text下载和汉化
- .NET基础拾遗(3)字符串、集合和流2
- class 文件反编译器的 java 实现
- sqlserver2008客户端设置主键自增
- #034Python选修课第二届Turtle绘图大赛
- Opencv 图像读取与保存问题
- 安装splash
- 2-物联网开发标配方案(51单片机程序介绍+WIFI程序介绍)
- Python3基础 访问在线的有道词典
- 标准正态分布表(scipy.stats)
- MySQL--批量KILL连接
- SaltStack 和 Ansible 的简单比较
- DockerFile(保你会版本)(七)
- linux找到目录下所有目录文件