try:
r = requests.get(url, params={'s': thing})
except requests.ConnectionError, e:
print e #should I also sys.exit(1) after this?
Run Code Online (Sandbox Code Playgroud)
它是否正确?有没有更好的方法来构建它?这会涵盖我的所有基础吗?
我下载了一个setup.py文件附带的dateutil,但是当我尝试打开它时会抛出错误.安装此模块的正确方法是什么?
这是错误:
error: no commands supplied
Run Code Online (Sandbox Code Playgroud) 我所说的"大n"是数以百万计的东西.p是素数.
我已经尝试了 http://apps.topcoder.com/wiki/display/tc/SRM+467 但是这个功能似乎是不正确的(我用144选择6 mod 5测试了它,当它应该给我时它给了我0 2)
我试过 http://online-judge.uva.es/board/viewtopic.php?f=22&t=42690 但我完全不明白
我还做了一个memoized递归函数,它使用逻辑(组合(n-1,k-1,p)%p +组合(n-1,k,p)%p)但是它给了我堆栈溢出问题因为n很大
我尝试过卢卡斯定理,但它似乎要么缓慢还是不准确.
我所要做的就是为大n创建一个快速/准确的n选择k mod p.如果有人能帮我展示一个很好的实现,我将非常感激.谢谢.
根据要求,对于大n的命中堆栈溢出的memoized版本:
std::map<std::pair<long long, long long>, long long> memo;
long long combinations(long long n, long long k, long long p){
if (n < k) return 0;
if (0 == n) return 0;
if (0 == k) return 1;
if (n == k) return 1;
if (1 == k) return n;
map<std::pair<long long, long long>, long long>::iterator it;
if((it = memo.find(std::make_pair(n, k))) != memo.end()) {
return …
Run Code Online (Sandbox Code Playgroud) 我很好奇是否有一个很好的方法来做到这一点.我目前的代码是这样的:
def factorialMod(n, modulus):
ans=1
for i in range(1,n+1):
ans = ans * i % modulus
return ans % modulus
Run Code Online (Sandbox Code Playgroud)
但它似乎很慢!
我也无法计算n!然后应用素数模数,因为有时n是如此之大,以至于n!明确计算是不可行的.
我也遇到过http://en.wikipedia.org/wiki/Stirling%27s_approximation,想知道这是否可以在某种程度上使用?
或者,我如何在C++中创建一个递归的,memoized函数?
制作一个简单的筛子很容易:
for (int i=2; i<=N; i++){
if (sieve[i]==0){
cout << i << " is prime" << endl;
for (int j = i; j<=N; j+=i){
sieve[j]=1;
}
}
cout << i << " has " << sieve[i] << " distinct prime factors\n";
}
Run Code Online (Sandbox Code Playgroud)
但是当N非常大并且我无法在内存中保存那种数组时呢?我已经查找了分段筛选方法,它们似乎涉及到找到素数直到sqrt(N),但我不明白它是如何工作的.如果N非常大(例如10 ^ 18)怎么办?
algorithm primes sieve-of-eratosthenes prime-factoring factors
假设我有一个值为[1,2,3,4,5,6,7,8,9,10]的向量.我想创建一个新的向量,例如,[5,6,7,8].我想这只是用指针创建一个向量的问题,还是我需要push_back所需的所有中间值?
我通常不确定何时使用一个与另一个相比更好.它们似乎总体上做同样的事情但是它的功能更加灵活吗?阵列什么时候更合适?
是否有可能使用numpy的linalg.matrix_power与模数,因此元素不会增长大于某个值?
我有一个嵌套的for循环结构,现在我在每次迭代开始时重新声明向量:
void function (n1,n2,bound,etc){
for (int i=0; i<bound; i++){
vector< vector<long long> > vec(n1, vector<long long>(n2));
//about three more for-loops here
}
}
Run Code Online (Sandbox Code Playgroud)
这允许我在每次迭代时"重新开始",这很有效,因为我的内部操作主要是以vec [a] [b] + =某个值的形式.但我担心大n1或大n2的速度很慢.我不知道vector/arrays/etc的底层架构,所以我不确定处理这种情况的最快方法是什么.我应该使用数组吗?我应该以不同方式清除它吗 我应该完全不同地处理逻辑吗?
编辑:矢量的大小在技术上不会改变每次迭代(但它可能会根据函数参数而改变).我只是试图清除它/ etc,因此在所有其他情况下,程序的速度与人类一样快.
编辑:
我的不同方法的结果:
Timings (for a sample set of data):
reclaring vector method: 111623 ms
clearing/resizing method: 126451 ms
looping/setting to 0 method: 88686 ms
Run Code Online (Sandbox Code Playgroud) 我知道如何在Python中轻松进行memoization,但我需要一种更快的方式来计算它们,所以我使用的是C++.但是,我不知道如何记忆.我知道它是关于将数值存储到数组或向量中,然后在检索时扫描它的值,但是看看如何完成它真的很有帮助,所以我可以尝试它的速度.