Skip to content

18176: 2050年成绩计算

http://cs101.openjudge.cn/practice/18176/

总时间限制: 100ms

随着人工智能技术和基因编辑技术的普及,2050年的学生成绩计算与目前2018年的规则很不一样。课程成绩要求是t-prime,才是有效成绩,否则按照零分计算。 现在需要统计每位学生在一个学期中,所有有效成绩课程的平均分,需要你的帮忙。 (素数是指除了1和它本身以外,不能被任何整数整除的数。 类似地,如果整数t恰好有且仅有三个不同的正除数,我们将称为它为t-prime。)

输入

第一行位两个整数,m个学生(1≤m≤2000),n门课(1≤n≤100,每个学生选课数可以不一样) 接下来m行,每行代表学生选课获得成绩。成绩由空格分隔,成绩是整数 Xi (1≤Xi≤10^8)。

输出

共m行,每行对应一位学生有效成绩课程的平均分(小数点后保留两位)。如果该生所有选课有效成绩是零分,则输出零。 对如下样例,第一个学生所有成绩都不是t-prime,因此输出0,注意这里不保留两位小数。 第二位学生只有4分是有效分数,故输出4/3 = 1.33 第三位学生只有两门课有成绩,4和25均为t-prime,因此输出平均值14.50

样例输入

3 3
100 120 2
3 4 5
4 25

样例输出

0
1.33
14.50

提示: Sieve of Eratosthenes

来源: cs101-2018

python
from math import sqrt
N = 10005

s = [True] * N
p = 2
while p * p <= N:
	if s[p]:
		for i in range(p * 2, N, p):
			s[i] = False
	p += 1

m, n = [int(i) for i in input().split()]

for i in range(m):
	x = [int(i) for i in input().split()]
	sum = 0
	for num in x:
		root = int(sqrt(num))
		if num > 3 and s[root] and num == root * root:
			sum += num
	sum /= len(x)
	if sum == 0:
		print(0)
	else:
		print('%.2f' % sum)