这里有没有人有任何有用的代码在python中使用reduce()函数?除了我们在示例中看到的通常的+和*之外,还有其他代码吗?
通过GvR 参考Python 3000中的reduce()命运
今天我读了一篇有趣的DailyWTF帖子,"Out of All the Possible Answers ...",我对它感兴趣,足以挖掘提交它的原始论坛帖子.这让我想到如何解决这个有趣的问题 - 最初的问题是在Project Euler上提出的:
2520是可以除以1到10中的每个数字而没有任何余数的最小数字.
可以被1到20的所有数字整除的最小数字是多少?
要将此作为一个编程问题进行改革,您将如何创建一个能够为任意数字列表找到最小公倍数的函数?
尽管我对编程很感兴趣,但我对纯数学的表现非常糟糕,但是我可以通过一些谷歌搜索和一些实验来解决这个问题.我很好奇SO用户可能采取的其他方法.如果你这么倾向,请在下面发布一些代码,希望还有一个解释.请注意,虽然我确定存在用于以各种语言计算GCD和LCM的库,但我更感兴趣的是比调用库函数更直接地显示逻辑的东西:-)
我最熟悉Python,C,C++和Perl,但您喜欢的任何语言都是受欢迎的.奖励积分,用于解释像我一样的其他数学挑战的人的逻辑.
编辑:提交后我确实发现这个类似的问题3个或更多数字的最小公倍数,但它回答了我已经想出的相同的基本代码,并没有真正的解释,所以我觉得这是不同的,足以让我们开放.
我有当前的编码,曾经是一个goto但我被告知不再使用goto,因为它不赞成.我有麻烦改变它说一段时间循环.我对C#和一般编程都很陌生,所以这对我来说是一些全新的东西.任何帮助,将不胜感激.实际问题是输入两个数字并找到最低的公倍数.
这是带goto的原文:
BOB:
if (b < d)
{
a++;
myInt = myInt * a;
b = myInt;
myInt = myInt / a;
if (b % myInt2 == 0)
{
Console.Write("{0} ", h);
Console.ReadLine();
}
}
if (d < b)
{
c++;
myInt2 = myInt2 * c;
d = myInt2;
myInt2 = myInt2 / c;
if (d % myInt == 0)
{
Console.Write("{0} ", t);
Console.ReadLine();
}
else
{
goto BOB;
}
}
else
{
goto BOB;
}
}
Run Code Online (Sandbox Code Playgroud) 我最近一直在研究Python中的Project Euler问题.我对Python很陌生,作为程序员还是有点新鲜.
无论如何,我遇到了与速度相关的问题,为问题#5编写了解决方案.问题是,
"2520是可以除以1到10之间的每个数字而没有任何余数的最小数字.可以被1到20的所有数字整除的最小正数是多少?"
我已经检查了一些,我无法找到任何与Python有关的问题.有一些已完成的脚本,但我想避免完全查看其他代码,如果可能的话,而不是想改进我自己的代码.
我编写的代码成功运行2520的示例和范围1到10,并且应该可以直接修改以处理问题.但是,在运行它时,我没有得到答案.据推测,这是一个非常高的数字,代码不够快.打印正在检查的当前号码似乎支持这一点,达到数百万而没有得到答案.
代码,在它的当前实现如下:
rangemax = 20
def div_check(n):
for i in xrange(11,rangemax+1):
if n % i == 0:
continue
else:
return False
return True
if __name__ == '__main__':
num = 2
while not div_check(num):
print num
num += 2
print num
Run Code Online (Sandbox Code Playgroud)
我已经做了一些改变,我认为应该有助于提高速度.首先,对于一个数字可以被所有数字1到20整除,它必须是偶数,因为只有偶数可以被2整除.因此,我可以增加2而不是1.此外,虽然我没有想到我自己,我发现有人指出一个可以被11到20整除的数字可以被1到10整除.(没有检查那个,但似乎合理)
但代码仍然不够快.我可以进行哪些优化(程序化或数学)来使这段代码运行得更快?
提前感谢任何可以提供帮助的人.
如何在PHP中简化一小部分?
例如,转换40/100为2/5.
我能想到的唯一方法是对两个数字进行素数分解并比较结果,但我不确定如何做到这一点.
给出以下数组:
complete_matrix = numpy.array([
[0, 1, 2, 4],
[1, 0, 3, 5],
[2, 3, 0, 6],
[4, 5, 6, 0]])
Run Code Online (Sandbox Code Playgroud)
我想确定平均值最高的行,不包括对角线零.因此,在这种情况下,我将能够识别出complete_matrix[:,3]具有最高平均值的行.
我想计算作为实例实现的两个有理数的最大公约数fractions.Fraction。尽管打印了弃用警告,但它按预期工作:
In [1]: gcd(Fraction(2, 3), Fraction(2, 3))
/usr/local/bin/ipython:1: DeprecationWarning: fractions.gcd() is deprecated. Use math.gcd() instead.
#!/usr/local/opt/python3/bin/python3.6
Out[1]: Fraction(1, 6)
Run Code Online (Sandbox Code Playgroud)
查看文档,我可以看到它fractions.gcd()确实已被弃用,并且邀请用户使用math.gcd()。问题是后者不支持有理数:
In [2]: gcd(Fraction(2, 3), Fraction(2, 3))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-c3ad2389f290> in <module>()
----> 1 gcd(Fraction(2, 3), Fraction(2, 3))
TypeError: 'Fraction' object cannot be interpreted as an integer
Run Code Online (Sandbox Code Playgroud)
我可以使用哪个函数来替换fractions.gcd()?我不是在寻找此处使用的实际算法,而是在寻找已弃用函数的替代品。
问题5: 2520是可以除以1到10中的每个数字而没有任何余数的最小数字.可以被1到20的所有数字整除的最小正数是多少?
我已经解决了Project Euler的问题5
这是Java代码:
static long FindLcm(long a,long b)
{
long lcm,hcf = 0;
long i=1;
long ger=a>b?a:b;
while(i<ger)
{
if((a%i==0) && (b%i==0))
hcf=i;
i++;
}
lcm=(a*b)/hcf;
return lcm;
}
static void FindMultiple()
{
long lcm=1;
for(long i=2;i<=20;i++)
{
lcm=FindLcm(lcm,i);
}
System.out.println("Lcm="+lcm);
}
Run Code Online (Sandbox Code Playgroud)
怎么能优化这个?