zoukankan      html  css  js  c++  java
  • 算法学习(十四)

    1.Fibonacci Divisibility

    说明:给定一个斐波纳契序列,从0和1开始,

    0 1 1 2 3 5 8 13 21 34 ...

    给你一些值M,要求找到这个列表中第一个非零元素的索引,它可以被这个M整除,例如,如果给你M=17,答案是9(元素34的索引,34被17整除)。

    输入数据:第一行中包含测试用例的数量。

    第二行包含被除数M因子(不超过10000)。

    答案:应该包含满足要求的斐波那契数列的索引,用空格隔开。

    例如:

    input data:
    3
    17 12 61
    
    answer:
    9 12 15

    测试数据:

    18
    7429 8478 3001 7204 9300 4803 4429 8703 2475 5778 3750 4126 9226 8926 6450 2327 9376 7579

    代码如下:

     1 test_cases = int(input())
     2 test_data = [int(num) for num in input().split()]
     3 
     4 fib = [0, 1]  # 构造fib数列
     5 a, b = 0, 1
     6 while b < 10**10000:
     7     a, b = b, a + b
     8     fib.append(b)
     9 
    10 for n in test_data:
    11     for m in fib[1:]:
    12         if m % n == 0:
    13             print(fib.index(m), end=' ')
    14             break  # 找到第一个数后,断开
    15 
    16 输出:72 2844 25 900 300 80 1144 264 300 36 7500 2064 7896 4464 3300 1246 1176 1890 

    2.Prime Ranges

    说明:给定一对素数(如a、b),你要找到它们之间所有素数的总数量,也包括给定的素数。

    isPrime(p) = true
    
        and
    
    a <= p <= b

    输入数据:第一行中包含测试对的数量。

    下面各行包含一对素数,第一个值总是小于第二个。所有的值都小于300万。

    答案:应该包含这些对所指定范围内的素数的数量。

    例如:

     input data:
     3
     5 19      # 在 5 和 19 之间的素数,包括 5 和 19 ,总共有6个数
     11 29    # 在 11 和 29 之间的素数,包括11和29,总共6个数
     2 23      # 同样,在 2 和 23 之间有9个素数,包括2和23
    
     answer:
     6 6 9

    测试数据:

    28
    2528893 2601089
    2017817 2070317
    1528627 2299489
    1988891 2260787
    1604737 2311549
    2020663 2070317
    1739461 2397631
    2397631 2528893
    1464733 2286293
    1325431 1854623
    2339933 2447009
    2571733 2679031
    1545917 1722013
    1464733 1504843
    2309471 2397631
    2469407 2601089
    2309471 2447009
    2240533 2625247
    2578993 2601089
    1585481 1737497
    2311549 2563007
    1570199 2723363
    1782211 2629223
    1916413 2266921
    2095997 2352787
    2421593 2497751
    2237051 2562613
    2562613 2705111

    代码如下:

    test_cases = int(input())
    
    def eladuosai(n): # 厄拉多塞筛法
        l = list(range(1, n+1))
        l[0] = 0
        for i in range(2, n+1):
            if l[i-1] != 0:
                for j in range(i*2, n+1, i):
                    l[j-1] = 0
        result = [x for x in l if x != 0]
        return result
    
    prime = eladuosai(3000000)   # 构造个小于300万的素数列表
    
    for _ in range(test_cases):
        data = [int(n) for n in input().split()]
        nums = []
        for i in prime:
            if i <= data[0] < i + 1:   # 找到第一个值对应的索引
                nums.append(prime.index(i))
            elif i <= data[1] < i + 1:  # 找到第二个值对应的索引
                nums.append(prime.index(i) + 1)   
        print((nums[1] - nums[0]), end=' ')   # 两个索引相减得到之间的总数
    
    输出:4914 3610 53294 18681 48817 3417 45272 8905 56897 37035 7272 7269 12294 2840 5968 8951 9311 26140 1500 10583 17037 79161 57996 24080 17532 5153 22116 9674
  • 相关阅读:
    [转]mysql的查询、子查询及连接查询
    [转]Mysql之Union用法
    [转]Mysql Join语法解析与性能分析
    【转】mysql中select用法
    [转]mysql update操作
    【转】mysql INSERT的用法
    框架:NHibernate学习目录
    NET基础篇——Entity Framework 数据转换层通用类
    MVC5 + EF6 + Bootstrap3
    MVC5+EF6 入门完整教程
  • 原文地址:https://www.cnblogs.com/zt19994/p/7445249.html
Copyright © 2011-2022 走看看