笑死我啦,我开始一直觉得 2 不是质数
查看原帖
笑死我啦,我开始一直觉得 2 不是质数
625709
TianCaiXiaobo楼主2021/11/24 14:52

我做好了 很多版本的 还用带到了 埃氏算法 ,后面发现2素数 。笑死

#先判断是 i是否为它的约数,再判断是否为质数
import math
def zhishu(i):
    # 先确定i 时候为质数
    t = True
    j = 2
    i=math.sqrt(i)
    while j <= i:
        if i % j == 0:
            t = False
            break
        j += 1
    return t
while True:
    try:
        n=int(input())
        m=int(math.sqrt(n))+1
        for i in range(2,m,1):
            if n%i==0:
                if zhishu(i) and zhishu(n//i):
                    a=i
                    b=n//i
                    c=(a>b and a or b)
                    print(c)
                    break
    except:
        break


下面 是个想办法 优化for里面的参数 等等
```python
import math
def zhishu(i):
    # 先确定i 时候为质数
    t = True
    j = 2
    i=math.sqrt(i)
    while j <= i:
        if i % j == 0:
            t = False
            break
        j += 1
    return t
def func(n):
    m = int(n / 2) + 1
    l=[]
    for i in range(3,m,2):
        if  zhishu(i)==False:
            continue
        #此时i质数

        if n%i==0:
            a=int(n/i)
            if zhishu(a) == False:
                continue
            l.append(i)
            l.append(a)
            if len(l)==2:break
    return max(l)


while True:
    try:
       n=int(input())
       print(func(n))

    except:
        break

埃氏算法

#埃式筛法
#求一个范围内的所有素数
def ertosthenes(n):
    primes = []
    is_prime = [True] * (n + 1)
    for i in range(2, n + 1):
        if is_prime[i]:
            primes.append(i)
        for j, p in enumerate(primes):
            # 防止越界
            if p > n // i:
                break
            # 过滤


            is_prime[i * p] = False
    # 当i % p等于0的时候说明p就是i最小的质因数
            if i % p == 0:
              break

    return primes

for i in range(100,0):
    print(i)

仔细审题 切记啊

2021/11/24 14:52
加载中...