2023年11月第3周学习笔记(11.25记)

本文介绍了如何使用编程解决歌德巴赫猜想的验证问题,包括优化素数查找算法和使用二分法,以及矩阵乘法的基本概念。同时提到了游戏开发中的一个小问题与Python编程的关联。
摘要由CSDN通过智能技术生成

学习目标:

因为快数学考试了,写完作业就哦弥陀佛了

学习内容:

歌德巴赫猜想

歌德巴赫猜想指出:任何一个大于2的偶数,都可以表示成两个素数的和。
然后又有人提出了另一方面的歌德巴赫猜想:大于5的所有奇数均是三个素数之和。

但对于在一个较小范围验证歌德巴赫猜想可以算作对一个查找算法的优化

  1. 判断剪枝
  2. 查询: int(目标数据) 减 min(“素数且未被匹配”) == 素数
  3. continue

First:

因为进行数据匹配需要大量的比较和计算,所以我们可以先建立一个素数表list1

listOne = []
n=3
while n<1000000:
    sign = 0
    for m in range(2,n):
        if n % m == 0:
            sign = 1
            break
    if sign == 1:continue
    else:
        listOne.append(n)
    n += 1

Second:

如果需要对所有可能进行列举,最好再建立一个结果列表。但如果只输出最小(最大)匹配值,那么可以在穷举比较成功后直接输出:

a=int(input())
i = 0
    another = 1000000
    while i < another:
        another = a - listOne[i]
        sign = 0
        for j in range(2,another):
                if another % j == 0:
                    sign = 1
                    break
        if(sign == 0):
            print(a," = ",listOne[i]," + ",another)
            break
        else:
            i += 1

但在此处还可以优化
当数据的大小进一步增大时,对匹配值的查找的用时直线增长。在这里可以小小地加一个二分法查找算法。同时还可以用图解的方法进行数据优化(见下方链接👇)。
*这里有一个图解和深入分析的好玩文章

Third:

最后插一句:对事先做好的素数表在空间允许的情况下可以做成离散列表。算是一个简单的摸鱼小技巧(特别是你还需要对目标数据进行别的操作时)


矩阵乘法:

矩阵乘法的核心要点有两个:

  1. 不遵循交换律
  2. A * B = C 中:
    C ( i , j ) = A ( i , 1 ) × B ( 1 , j ) + A ( i , 2 ) × B ( 2 , j ) + . . . A ( r , 1 ) × B ( r , j )
    矩阵 C 的第 i 行第 j 列元素 = 矩阵 A 的第 i 行元素与矩阵 B 的第 j 列对应元素乘积之和。
n,p,m = map(int, input().split())#在一行内输入多个数字,空格隔开
listA = []
listB = []
for i in range(0,n):#建立A矩阵
	ans=[int(j) for j in input().split()]
	listA.append(ans)

listB=[]
for i in range(0,p):#建立B矩阵
	ans=[int(j) for j in input().split()]
	listB.append(ans)

listNew = [[0 for j in range(0,m)] for i in range(0,n)]

for i in range(0,n):
    for j in range(0,m):
        for l in range(0,p):
            listNew[i][j]+=listA[i][l]*listB[l][j]

# 每个数模 10 ^ 9 + 7 输出?为什么用例里面只有负数+7了?

for i in range(0,n):
    for j in range(0,m):
        # if listNew[i][j]<0:
        listNew[i][j] = listNew[i][j]%1000000000+7
        
# 虽然但是,在作业提交中不管我用什么个方法都是输出了正确数据但显示我wrong

for i in range(0,n):
    for j in range(0,m-1):
        print(listNew[i][j],end = ' ')
    print(listNew[i][m-1],end = ' \n')


额外完成:

为什么文明6又卡bug啊!!!!!!!2k你 @#¥……¥……%#*&……
所以,在查找问题时记录下来了一个开发易犯的问题:
发多少描述
由于文明6也是用python开发的,所以才加在了这里。2k工作室发布了11月活动后的更新后很有可能没有对活动的界面同步,在更新的同时撤销了活动。但它并没有把用户本地的活动界面的发布器关掉,只是撤离了online上的图文。而这个活动的界面对开始面板有调位行为,导致一个“空图”把开始界面拦截了。
解决方案是在steam讨论区去领一个专门关掉活动界面的发布器的mod,在界面加载前,文件配置时把这个活动做掉。
我觉得这个玩得挺有意思的,下次有时间自己再敲一个出来。最搞笑的是:2K官方竟然给出的置顶解决方案是删掉dlc并重装?!辣鸡2K狗都不用


学习时间:

2023.11.22~2023.11.25


  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值