京东的某道编程题

大胸弟们能帮忙看看这道题的解法吗?用了暴力求解出倍数,还参照了秋叶拓哉算法书的素数相关的想法,还是只得了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)
#笔试题目##京东#
全部评论
1.求出1~n之间所有的素数. 2.对每一个素数pi求出一个ki, 使得pi^ki <= n && pi^(ki + 1) > n. 答案就是: 
点赞 回复 分享
发布于 2018-04-10 13:53
递归,每次只需要计算n和前面n-1个数的结果的最小公倍数
点赞 回复 分享
发布于 2018-04-10 13:46

相关推荐

SadnessAlex:跟三十五岁原则一样,人太多给这些***惯坏了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务