质数拆解&&平面分割

题目

将 20192019 拆分为若干个两两不同的质数之和,一共有多少种不同的方法?

注意交换顺序视为同一种方法,例如 2+2017=2019 与2017+2=2019 视为同一种方法。

思路

之前写过类似的题目,X进制减法&&2022_pepsi_w的博客-CSDN博客 。发现是背包问题!不会写这个,数组含义都记不住!然后看了一下题解,感觉还是不太会的亚子。

代码

import os
import sys

# 请在此输入您的代码

import math

nums = [] #先找出2019以内的质数
for i in range(2, 2018):
  for j in range(2, i):
    if i%j == 0:
      break
  else:
    nums.append(i)

dp = [0 for i in range(2020)]
num = 2019
s = len(nums)
dp[0] = 1  # 进行初始化
for i in range(s):
    for j in range(num, nums[i]-1, -1):
    # 质数要求两两不同,所以装下p[i]后就不能再用了,所以直接除去它
        dp[j] += dp[j-nums[i]]
print(int(dp[2019]))

题目

20 个圆和20 条直线最多能把平面分成多少个部分? 

思路

找不到规律,看了题解。思路如下:

 还有直接写公式的:

#直线与圆共同分割平面的公式(m:圆,n:直线):f(m,n)=m^2-m+2+2mn+1/2*n^2+1/2*(n) -1

代码

import os
import sys

# 请在此输入您的代码
lines = 20 # n = 已有平面个数+交点个数+1
cirl = 20 
a = [[0 for i in range(21)]for i in range(21)] #n[i][j] i表示直线个数 j表示圆个数
a[0][0] = 1 #初始有一个平面
for i in range(1, 21):
  a[i][0] = a[i-1][0] + i
  for j in range(1, 21):
    a[i][j] = a[i][j-1] + 2 * (j-1) + 2 * i #目前已有j-1个圆 i条直线

print(a[20][20])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值