任何人都可以帮我解决这个问题吗?
给定数字N,打印小于或等于N的所有复合数。该数字应按升序打印。
输入: 第一行包含表示测试用例数的整数T.然后是T测试案例。每个测试用例由一个整数N组成。
输出: 将所有复合数字形式0打印到N。
约束:
1 ≤ T ≤ 50
4 ≤ N ≤ 10000
Example:
Input:
2
10
6
Output:
4 6 8 9 10
4 6
我的解决方案如下:
def comp(n):
for i in range (4,n+1):
for j in range(2,i):
if i % j == 0 :
print(i)
break
t = int(input(""))
while(t >=1 & t <= 50):
for k in range(0,t):
p = int(input(""))
if(p >=4 & p <= 10000):
comp(p)
但在EOFError
p = int(input(""))
答案 0 :(得分:0)
当您提供的输入值低于要求时,会发生此错误。您的程序期望输入比您实际提供的更多。
如果您使用管道将数据发送到脚本的stdin,请确保每个输入都以换行符发送,如下所示。
gem uninstall bundler
gem install bundler -v 1.11.2
答案 1 :(得分:0)
这里的罪魁祸首是while
循环,而不是if
。因为t
是一个常量值,while
循环将永远不会结束,因此p = int(input(""))
将执行超过所需时间的执行。因此,EOFError
上的p = int(input(""))
。
答案 2 :(得分:-2)
使用递归的简单解决方案。
def check_prime(n):
for i in range(2,int(math.sqrt(n))+1):
if(n%i==0):
return 0
return 1
def print_composite(n):
if(n<5):
print(n),
return
print_composite(n-1)
if(check_prime(n)==0):
print(n),
return
我终端的示例输出
>>> print_composite(10)
4 6 8 9 10
>>> print_composite(6)
4 6
>>> print_composite(16)
4 6 8 9 10 12 14 15 16