2023CSP-J复赛模拟一
题目一:数字降级
时间限制:1秒 内存限制:256M
题目描述
数字每一次降级都表示将一个数字除以一次它的任意一个因子。请问最少几次操作可以将一个数字n ,降级成一个质数?
例如:数字n=8,第一种方案为选择8的因子2,然后用8除以2,那么n=4,继续选择8的因子2,重复操作;第二种方案为选择8的因子4,将8除以4,得到n=2。那么选择次数最少操作,将次
数输出
输入格式
输入一行,包含一个数字 。
输出格式
输出一行,包含一个答案。
输入样例
8
输出样例
1
数据范围
在80%数据下: 2<=n<=10^6
在100%数据下: 2<=n<=10^10
解题思路
1.若n是合数,因为n>=2,所以n可以被因式分解为a^x+b^y+……的形式,a,b为质数
那么n=a*[a^(x-1)+b^y+……],只要除以它除a的一次方外的因子,就可以得到一个质数,故为1
2.若n是质数,则不需改变,故为0。
综上,这道题题意为判断n是否是质数
AC代码
#include<iostream>
using namespace std;
int main(){
long long n;
cin >> n;
for(long long i=2; i*i<=n; i++){
if(n%i == 0){
cout << 1;
return 0;
}
}
cout << 0;
return 0;
}
题目二:分组
时间限制:1秒 内存限制:256M
题目描述
小可召集大家一起来玩游戏!
小可总共召集了 n 位玩家,每位玩家有一个专属分数 a i,现在需要将 n 为玩家进行分组,分组之后每个组将获得一个小组专属分数 b i。小组专属分数为小组内每位玩家专属分数组成的集合中没有出现过的最小的自然数。比如第一组中每个人分数为1,2
,那么小组分数为0
,第二组中每个人的分数为0,1,2
,那么小组分数为3
。
为了提高胜率,肯定要让∑b i 最大,请输出最大的∑b i 。
输入格式
第一行包含一个整数 n,表示 n 为玩家。
第二行输入 n 个非负整数,表示a i。