1006练习题

T1 因子素数(prime)
题目描述

小明特别喜欢素数,现在单纯的素数已经无法满足他的狂热了,他需要更多与素数相关的数!经过苦苦思考,他终于找了一种与素数相关的数——因子个数是素数的数,小明称这样的数为因子素数。

举个例子:

666 不是因子素数,因为它的因子个数为 444(包括1,2,3,61,2,3,61,2,3,6)。

999 是因子素数,因为它的因子个数为 333 (包括1,3,91,3,91,3,9)。

现在给你一个数 nnn,请你求出其中所有小于等于 nnn 的因子素数之和。

输入格式

从文件 prime.in 中读入数据
输入一个整数 nnn

输出格式

输出到文件 prime.out 中
输出一个整数,表示答案

数据范围

1≤n≤1041 \leq n \leq 10^41n104

样例数据
输入:

20

输出:

106

说明:

20以内的因子素数为2 3 4 5 7 9 11 13 16 17 19,和为106

 
 
 

5G通讯(comm)
题目描述

nnn5G5G5G 用户在一条直线上,其中第 iii 名用户的坐标为 xix_ixi 。给定一个上界 ddd,若两名用户的距离不超过 ddd,那么他们可以直接通讯。请统计有多少对用户可以直接通讯。

输入格式

从文件 comm.in 中读入数据
第一行,两个整数表示 nnnddd
第二行,nnn 个整数,表示 x1,x2,…,xn。x_1,x_2,\dots,x_n 。x1,x2,,xn

输出格式

输出到文件 comm.out 中
单个整数:表示有多少对用户可以直接通讯。

数据范围

对于 30% 的数据,1≤n≤10001\leq n \leq 10001n1000
对于 70% 的数据,1≤n≤10,0001\leq n \leq 10,0001n10,000
对于 100% 的数据,1≤n≤100,0001\leq n \leq 100,0001n100,000
1≤d≤1,000,000,0001 \leq d \leq 1,000,000,0001d1,000,000,000
1≤xi≤1,000,000,0001 \leq x_i \leq 1,000,000,0001xi1,000,000,000

样例数据
输入:

4 25
10 20 30 40

输出:

5

说明:

(10,20)(20,30)(30,40)(10,30)(20,40)(10,20) (20,30) (30,40) (10,30) (20,40)(10,20)(20,30)(30,40)(10,30)(20,40)

 
 
 

T3 放置拼块(block)
题目描述

小爱有很多 2×22 \times 22×2 的积木拼块,现在她打算在一个 n×mn \times mn×m 的底板上,铺上数量若干的积木拼块,拼块之间不能重合。底板上可能已经存在一些拼块,具体位置由输入给定。请统计小爱有多少种放置拼块的方法。

举例来说,假设在一个 3×43 \times 43×4 的蓝色底板上,已经存在一个拼块(以红色表示):
01.png

那么继续放置只有三种可能:

02.png

第一种是不放置新的拼块,第二、第三种可能方案是在绿色部分放置一块拼块。由于底板的大小有限,没有办法放置更多的拼块。

输入格式

从文件 block.in 中读入数据
第一行:三个正整数 nnnmmmkkk
接下来 kkk 行,每行两个整数 xix_ixiyiy_iyi ,表示一个已经存在的拼块,(xi,yi)(x_i,y_i)(xi,yi) 表示该拼块的左上角位置。

输出格式

输出到文件 block.out 中
单个整数:表示放置拼块的方案数。

数据范围

1≤n,m≤81 \leq n,m \leq 81n,m80≤k≤160 \leq k \leq 160k16

样例数据
输入:

3 4 1
2 3

输出:

3

说明:

即题干中的例子

输入:

3 4 0

输出:

11

 
 
 

T4 旋转减半数(rotate)
题目背景

842105263157894736842105263157894736842105263157894736 是一个很有趣的数字,因为如果将第一位数字 888 移动到最后,可以得到 421052631578947368421052631578947368421052631578947368,恰好是原来数字的一半。这样旋转后恰好减半的数字在其他进制中也存在。比如在二进制下,101010101010 就是一个旋转后减半的数字:
(1010)2=(0101)2+(0101)2(1010)_2 = (0101)_2 + (0101)_2(1010)2=(0101)2+(0101)2

题目描述

给定一个正整数 bbb,请求出 bbb 进制下最小的旋转减半数,所谓旋转减半数,就是将第一位数字移动到最后一位后,得到的新数字恰好在 bbb 进制下为原数字大小的一半。

如果不存在这样的数字,输出 NoneNoneNone

输入格式

从文件 rotate.in 中读入数据
单个整数表示 bbb

输出格式

输出到文件 rotate.out 中
若干个自然数,每个数字表示一位数字,每位数字在 000b−1b-1b1 之间,第一位不能为 000,每个数字间有一个空格。若不存在这样的数字,输出 None。

数据范围

对于 30% 的数据,2≤b≤102\leq b\leq 102b10
对于 60% 的数据,2≤b≤2002\leq b\leq 2002b200
对于 100% 的数据,2≤b≤20002\leq b\leq 20002b2000

样例数据
输入:

2

输出:

1 0

输入:
10
输出:

1 0 5 2 6 3 1 5 7 8 9 4 7 3 6 8 4 2

 
 
 

T5 最长锯齿子序列
题目描述(sequence)

给定 nnn 个整数组成的序列 a1,a2,⋯ ,ana_1,a_2,\cdots,a_na1,a2,,an ,请从中挑出尽量长的子序列,形成一个锯齿序列。所谓锯齿序列,就是它的差分序列(由相邻数字的差组成的序列)是正负交替的。为了避免差为 000 时不方便区分正负,保证给定的每个数字都不相同。例如给定的序列是 1,3,5,2,4,6,那么它的子序列 1,5,2,6 是一个锯齿序列,因为它的差分序列是 4,−3,44,-3,44,3,4;而 1,3,51,3,51,3,5 不是,因为这三个数字是递增的。

输入格式

从文件 sequence.in 中读入数据
第一行:一个整数 nnn
第二行:nnn 个整数 a1,a2,⋯ ,ana_1,a_2,\cdots,a_na1,a2,,an

输出格式

输出到文件 sequence.out 中
单个整数:表示最长的锯齿子序列长度

数据范围

对于30%的数据:1≤n≤101\leq n\leq 101n10
对于60%的数据:1≤n≤1031\leq n\leq 10^31n103
对于100%的数据:1≤n≤1041\leq n\leq 10^41n1041≤ai≤1051\leq a_i\leq 10^51ai105

样例数据
输入:

6
1 3 5 2 4 6

输出:

4

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值