[刷题] 求素数

1、求出2-10000内的所有素数

Python:

t = time()
    p_list = []
    for i in range(2, b):
        flag = True
        for p in p_list:
            if p > math.sqrt(i):
                break
            if i % p == 0:
                flag = False
                break
        if flag:
            p_list.append(i)
    print(time() - t)
    print(p_list)

把素数判断部分封装为函数:

def is_prime3(x):
    flag = True
    for p in p_list2:
        if p > math.sqrt(x):
            break
        if x % p == 0:
            flag = False
            break
    if flag:
        p_list2.append(x)
    return flag

p_list2 = []
t = time()
list(filter(is_prime3, list(range(2, b))))
print(time() - t)
print(p_list2)

2、环形公路堵车模拟

路上有N辆车,以不同速度行驶

1)某辆车当前速度是v

2)若前方可见范围内无车,则下一秒车速提高到v+1,直到最高限速

3)若前方有车,车距为d,且d<v,则下一秒车速将为d-1

4)每辆车以概率p随机减速v-1

Python:

 1 import numpy as np
 2 import matplotlib as mpl
 3 import matplotlib.pyplot as plt
 4
 5
 6 def clip(x, path):
 7     for i in range(len(x)):
 8         if x[i] >= path:
 9             x[i] %= path
10
11
12 if __name__ == "__main__":
13     mpl.rcParams[‘font.sans-serif‘] = [‘SimHei‘] #中文字体
14     mpl.rcParams[‘axes.unicode_minus‘] = False
15
16     path = 5000     # 环形公路的长度
17     n = 100         # 公路中的车辆数目
18     v0 = 50          # 车辆的初始速度
19     p = 0.3         # 随机减速概率
20     Times = 3000
21
22     np.random.seed(0)
23     x = np.random.rand(n) * path
24     x.sort()
25     v = np.tile([v0], n).astype(np.float)
26
27     plt.figure(figsize=(9, 7), facecolor=‘w‘)
28     for t in range(Times):
29         plt.scatter(x, [t]*n, s=1, c=‘k‘, alpha=0.05)
30         for i in range(n):
31             if x[(i+1)%n] > x[i]:
32                 d = x[(i+1) % n] - x[i]   # 距离前车的距离
33             else:
34                 d = path - x[i] + x[(i+1) % n]
35             if v[i] < d:
36                 if np.random.rand() > p:   #随机减速
37                     v[i] += 1
38                 else:
39                     v[i] -= 1
40             else:
41                 v[i] = d - 1
42         v = v.clip(0, 150)
43         x += v
44         clip(x, path)
45     plt.xlim(0, path)
46     plt.ylim(0, Times)
47     plt.xlabel(‘车辆位置‘, fontsize=14)
48     plt.ylabel(‘模拟时间‘, fontsize=14)
49     plt.title(‘环形公路车辆堵车模拟‘, fontsize=18)
50     plt.tight_layout(pad=2)
51     plt.show()

原文地址:https://www.cnblogs.com/cxc1357/p/10409247.html

时间: 2024-10-25 00:01:12

[刷题] 求素数的相关文章

C++刷题——2707: 素数与因子

Description 从键盘输入任意整数n,若n不是素数,则计算出n的所有因子(不包括1),例如对于16,输出2,4,8:否则输出"It is a prime number." 判断素数和求因子分别用函数完成. Input 任意整数n Output 该数的因子或素数标志. Sample Input 16 Sample Output 2 4 8 /* Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp

leetcode 204题求素数个数

    Description: Count the number of prime numbers less than a non-negative number, n 提示晒数法: http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes https://primes.utm.edu/howmany.html 别人的代码: int countPrimes(int n) { if (n<=2) return 0; vector<bool> p

蓝桥杯 算法训练 Torry的困惑(基本型)(水题,筛法求素数)

算法训练 Torry的困惑(基本型) 时间限制:1.0s   内存限制:512.0MB 问题描述 Torry从小喜爱数学.一天,老师告诉他,像2.3.5.7--这样的数叫做质数.Torry突然想到一个问题,前10.100.1000.10000--个质数的乘积是多少呢?他把这个问题告诉老师.老师愣住了,一时回答不出来.于是Torry求助于会编程的你,请你算出前n个质数的乘积.不过,考虑到你才接触编程不久,Torry只要你算出这个数模上50000的值. 输入格式 仅包含一个正整数n,其中n<=100

hdu2136Largest prime factor (关建在求素数,有点意思的题)

Problem Description Everybody knows any number can be combined by the prime number. Now, your task is telling me what position of the largest prime factor. The position of prime 2 is 1, prime 3 is 2, and prime 5 is 3, etc. Specially, LPF(1) = 0. Inpu

HDU2710_Max Factor【水题】【筛法求素数】

Max Factor Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3966    Accepted Submission(s): 1289 Problem Description To improve the organization of his farm, Farmer John labels each of his N (1

第十六周oj刷题——Problem C: B 求类中数据成员的最大值-类模板

Description 声明一个类模板,类模板中有三个相同类型的数据成员,有一函数来获取这三个数据成员的最大值. Input 分别输入3个整数,3个浮点数,3个字符 Output 3个整数的最大值 3个浮点数中的最大值 3个字符中的最大值 Sample Input 9 5 6 1.1 3.4 0.9 a b c Sample Output 9 3.40 c /* All rights reserved. * 文件名称:test.cpp * 作者:陈丹妮 * 完成日期:2015年 6 月 25 日

第十五周oj刷题——Problem E: C++习题 对象数组求最大值

Description 建立一个对象数组,内放n(<10)个学生的数据(学号.成绩),设立一个函数max,用指向对象的指针作函数参数,在max函数中找出n个学生中成绩最高者,并输出其学号. Input n和n个学生的学号.成绩 Output 成绩最高者的学号和成绩 Sample Input 5 101 78.5 102 85.5 103 98.5 104 100.0 105 95.5 Sample Output 104 100.00 /* All rights reserved. * 文件名称:

HDU2098 分拆素数和【水题】【筛法求素数】

分拆素数和 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 23345    Accepted Submission(s): 10115 Problem Description 把一个偶数拆成两个不同素数的和,有几种拆法呢? Input 输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束. Output 对

刷题之路(八)求字符串中的符合要求的数字

简介:String to Integer (atoi)—实现将字符串转换为整数的atoi 问题详解:给定一个字符串str,在该函数中首先丢弃所需数量的空白字符,直到找到第一个非空白字符’ ',然后,从该字符开始,采用可选的初始加号或减号,后跟尽可能多的数字,并将它们转换为数值. 其他非数字字符串可以包含在形成整数之后的其他字符,这些字符将被忽略,如果str中的第一个非空白字符序列不是有效的整数,或者由于str是空的或者只包含空格字符而不存在这样的序列,则返回零值 超出-2^31 ~ 2^31-1