为什么这段代码会返回一个数字因子的总和?
在几个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的数量是每个唯一因子在素数因子分解中出现的次数.
为什么这个公式等于因子的总和?我的猜测是,它等于通过分配属性的每个独特的素因子组合(即每个独特因子)的总和,但我不知道如何.
Python的随机模块中的randint(a,b)函数返回a到b范围内的"随机"整数,包括两个端点.填写下面函数中的空白,该空白创建并返回0和1的长度为n的随机字符串.
from random import randint:
def randString01(n):
_________________
_________________
for count in range(n):
__________________
return________________
Run Code Online (Sandbox Code Playgroud)
(编辑::导入语句的末尾不属于;但是,如原始问题中所示.)
...到目前为止,我发现如何将n变成n长度的字符串(所以n n的字符串)我想知道randint适用于哪里?到目前为止我有
from random import randint
def randString01(num):
x = str()
count = num
while count >0:
if randint(0,1) == 0:
append.x(0)
else:
append.x(1)
count -= 1
x=str(x)
return x
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我该怎么办?
我目前正在尝试使用NLTK构建一个通用(或一般的实用)POS标记器.我已经涉足棕色和树库语料库进行训练,但可能会在树库语料库中定居.
随着我的学习,我发现分类器POS标签是最准确的.最大实体分类器意味着最准确,但我发现它使用了大量内存(和处理时间),我必须大大减少训练数据集,因此最终结果不如使用默认的朴素贝叶斯分类器.
有人建议我使用MEGAM.NLTK对MEGAM有一些支持,但我发现的所有例子都是针对一般分类器(例如,使用单词特征向量的文本分类器),而不是更具体的POS标记器.无需重新创建我自己的POS功能提取器和编译器(即我更喜欢使用已经在NLTK中的那个),我如何使用MEGAM MaxEnt分类器?IE浏览器.我怎么能把它放在一些现有的MaxEnt代码中:
maxent_tagger = ClassifierBasedPOSTagger(train=training_sentences,
classifier_builder=MaxentClassifier.train )
Run Code Online (Sandbox Code Playgroud) 我想使用c#的webbrowser组件加载HTML.我查找了MSDN,但我找不到任何可以将字符串(HTML)加载到webbrowser组件中的内容.我只看到一个加载URL的navigate()方法.
所以..如果可能,我想要以下内容
String htmlcontent = "<html><head><title>test</title></head><body>my content here</body></html>";
webBrowser1.load(htmlContent)
Run Code Online (Sandbox Code Playgroud)
像这样的东西..我加载没有load()方法.
我有以下产品价格验证:
class Product < ActiveRecord::Base
...
PRICE_REGEX = /^([1-9]\d{0,5}|0)(\.\d{1,2})?$/
validates :price, :presence => true, :format => PRICE_REGEX
...
end
Run Code Online (Sandbox Code Playgroud)
它应该允许价格0来999999.99.
但是,如果我输入hello,则验证通过,并0.00保存在数据库中.
但:presence验证工作正常.
我在这里错过了什么?
我正在尝试更改sqlite3文件中的一些数据,而我在python和google-fu中不存在的知识使我最终获得了以下代码:
#!/usr/bin/python
# Filename : hello.py
from sqlite3 import *
conn = connect('database')
c = conn.cursor()
c.execute('select * from table limit 2')
for row in c:
newname = row[1]
newname = newname[:-3]+"hello"
newdata = "UPDATE table SET name = '" + newname + "', originalPath = '' WHERE id = '" + str(row[0]) + "'"
print row
c.execute(newdata)
conn.commit()
c.close()
Run Code Online (Sandbox Code Playgroud)
它在第一行上像超级按钮一样工作,但是由于某种原因,它只运行一次循环(仅修改表中的第一行)。当我删除“ c.execute(newdata)”时,它将按需循环遍历表中的前两行。我该如何运作?
我正在开发一个扩展的SMS应用程序.现在我可以阅读mmssms.db中的所有短信.在SMS数据库表中,字段"person"表示联系人表中的"_id".当'person'> = 1时,这意味着该消息是从联系人列表中的人发送的.所以我可以从联系表'managedQuery'.但问题是,在我的手机中,测试程序有时甚至无法查询联系信息甚至'人'> = 1.那么有人可以告诉我一些正确的方法来查询短信表中提交的"人"的联系信息吗?以下是一些示例代码,可以使我的问题更清晰:
class ContactItem {
public String mName;
}
ContactItem getContact(Activity activity, final SMSItem sms) {
if(sms.mPerson == 0) return null;
Cursor cur = activity.managedQuery(ContactsContract.Contacts.CONTENT_URI,
new String[] {PhoneLookup.DISPLAY_NAME},
" _id=?",
new String[] {String.valueOf(sms.mPerson)}, null);
if(cur != null &&
cur.moveToFirst()) {
int idx = cur.getColumnIndex(PhoneLookup.DISPLAY_NAME);
ContactItem item = new ContactItem();
item.mName = cur.getString(idx);
return item;
}
return null;
}
Run Code Online (Sandbox Code Playgroud) 仅使用标准python 2.6安装附带的模块,是否可以发出简单的哔声?
我有一个简单的代码示例@ http://jsbin.com/ukiwo3/edit
它有2个连接列表和一组绑定事件.我希望我错过了一些基于http://jqueryui.com/demos/sortable/的简单事件我认为当我拖动并重新排序问题时,我应该看到所有这些事件被触发.目前只将日志排序到控制台.
任何人都可以告诉我什么是错的,如何让其他人解雇?
谢谢,丹尼斯
我想在页面的所有元素加载之前(而不是之后)加载我的Chrome扩展程序.这可能吗?谢谢!