京东的某道编程题
大胸弟们能帮忙看看这道题的解法吗?用了暴力求解出倍数,还参照了秋叶拓哉算法书的素数相关的想法,还是只得了10%的分数。现在还是搞不定。
#coding=utf-8
import sys
if __name__ == "__main__":
# 读取第一行的n
n = int(sys.stdin.readline().strip())
flag=[]
# 如果flag[i]为True,就代表自然数(i+1)在1~i的范围内中有约数。
for i in range(0,n):
flag.append(False)
for i in range(1,n+1):
flag1=False
for k in range(1,int(n/i)):
flag[k*i]=True
flag1=True
if (flag1):flag[i-1]=False #1~n中有i的倍数,设为flag[i-1]为False
ans=1
for i in range(0,n):
if (flag[i]):ans=ans*(i+1)
print(ans%987654321)
#coding=utf-8
import sys
if __name__ == "__main__":
# 读取第一行的n
n = int(sys.stdin.readline().strip())
flag=[]
#如果flag[i]为True,就代表自然数(i+1)在1~i的范围内中有约数。
for i in range(0,n):
flag.append(True)
for k in range(1,n+1):
#暴力求解出有1~(k-1)中k的约数,设为False
for i in range(1,k-1):
if (k%i == 0):
flag[i-1]=False
ans=1
for i in range(0,len(flag)):
if (flag[i] == True):
ans = (ans*(i+1))
print (ans%987654321)#笔试题目##京东#