为什么这段代码会返回一个数字因子的总和?
在几个Project Euler问题中,您被要求计算因子的总和作为问题的一部分.在那里的一个论坛上,有人发布了以下Java代码作为查找总和的最佳方式,因为你实际上不需要找到个别因素,只需要找到主要因素(你不需要知道Java,你可以跳到下面的摘要):
public int sumOfDivisors(int n)
{
int prod=1;
for(int k=2;k*k<=n;k++){
int p=1;
while(n%k==0){
p=p*k+1;
n/=k;
}
prod*=p;
}
if(n>1)
prod*=1+n;
return prod;
}
Run Code Online (Sandbox Code Playgroud)
现在,我已经尝试了很多次,我发现它有效.问题是,为什么?
说你因素100: 1,2,4,5,10,20,25,50,100.总和是217.主要因素分解是2*2*5*5.这个功能给你[5*(5+1)+1]*[2*(2+1)+1] = [25+5+1]*[4+2+1] = 217
保理8:1,2,4,8.总和是15.主要因素分解是2*2*2.这个功能给你[2*(2*(2+1)+1)+1]=15
该算法归结为(Fi用于表示因子F或F sub i的第i个索引):
return product(sum(Fi^k, k from 0 to Ni), i from 1 to m)
Run Code Online (Sandbox Code Playgroud)
其中m,唯一素因子Ni的数量是每个唯一因子在素数因子分解中出现的次数.
为什么这个公式等于因子的总和?我的猜测是,它等于通过分配属性的每个独特的素因子组合(即每个独特因子)的总和,但我不知道如何.
我试图在Plotly for Python中绘制几个不同颜色的表面.
具体地,表面示出了用于在相空间中的不同点处采取动作的预测奖励函数.由于我在每个点都有几个可能的动作,每个动作都是不同的表面.我想要唯一地为每个表面着色,但不依赖于x,y或z坐标.
我试着在R中回答,但我无法弄清楚我做错了什么.我总是得到相同的蓝色.因为我在我的代码的其他部分使用PyPlot,所以我从默认的matplotlib表格中选择颜色.
这是玩具数据的基本示例.
import matplotlib.pyplot as plt
import numpy as np
import plotly.graph_objs as go
import plotly.offline as off
off.init_notebook_mode()
make_int = np.vectorize(int)
cmap = plt.get_cmap("tab10")
saddle = np.array([[x**2-y**2 for x in np.arange(-10,11)] for y in np.arange(-10,11)])
paraboloid = np.array([[x**2 + y**2-100 for x in np.arange(-10,11)] for y in np.arange(-10,11)])
mycolors_a = make_int(256*np.array(cmap(1)[0:3])).reshape((1, 1,-1)).repeat(21, axis = 0).repeat(21, axis =1)
mycolors_b = make_int(256*np.array(cmap(2)[0:3])).reshape((1, 1,-1)).repeat(21, axis = 0).repeat(21, axis =1)
trace_a = go.Surface(z = saddle, surfacecolor = …Run Code Online (Sandbox Code Playgroud) 我正在尝试从容器中的源代码构建 Python 和 OpenSSL。两者似乎都构建正确,但 Python 没有成功创建_ssl模块。
我在网上找到了一些指南 ,其中提到取消 Python 中的注释和行3.X.X/Modules/Setup,并将--openssldir=/usr/local/ssl标志添加到./configureOpenSSL 的步骤中。我在我的 dockerfile 中执行这些操作。这导致在./configurePython 输出期间,我看到以下行。
checking for X509_VERIFY_PARAM_set1_host in libssl... yes
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
[91m*** WARNING: renaming "_ssl" since importing it failed: /usr/lib/x86_64-linux-gnu/libssl.so.1.1: version `OPENSSL_1_1_1' not found (required by build/lib.linux-x86_64-3.8/_ssl.cpython-38-x86_64-linux-gnu.so)
[0m[91m*** WARNING: renaming "_hashlib" since importing it failed: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1: version `OPENSSL_1_1_1' not found (required by build/lib.linux-x86_64-3.8/_hashlib.cpython-38-x86_64-linux-gnu.so)
[0m
Python build finished successfully!
Run Code Online (Sandbox Code Playgroud)
...
Following modules built successfully but were removed because they …Run Code Online (Sandbox Code Playgroud)