作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以,我正在解决问题 10,并得出一个解决方案:
acu = 0;
for(i=2;i<=2000000;i++){
if(primo(i)== 1){
acu = acu + i;
}
}
primo 所在位置:
int primo(long num){
long pd;
pd = num/2;
while(pd > 1 && num%pd != 0){
pd--;
}
if (pd == 1)
return 1;
else
return -1;}
在我的机器上执行的时间大约是 700 秒。然后我在代码中更改它:
int primo(long num){
long pd;
pd = lround(sqrt(num));
while(pd > 1 && num%pd != 0){
pd--;
}
if (pd == 1)
return 1;
else
return -1;}
执行时间大约是15秒。为什么 num/2 和 lround(sqrt(num)) 之间差异如此之大?
最佳答案
只是因为在最坏的情况下(当 num
为素数时),第一个实现将循环 num/2
次,但第二个实现将循环 sqrt(num)
次,当然 sqrt(num)
比 num/2
低很多,所以第二个实现所需的时间比第一个实现所需的时间要低第一。
编辑:
如果您想要另一个比您使用的两个更快的实现,那就是:
int primo(long num){
if(num==2) return 1; //2 is even but prime so we check it herer cause the next test will return 0 for even bumbers
if(num%2==0) return 0; //if it is a multiple of 2 it is not a prime number so we do not loop in this case
long nb_sqrt= lround(sqrt(num));
if(nb_sqrt%2==0) nb_sqrt++; //start from an odd number (explained in the loop)
while(num%nb_sqrt != 0) nb_sqrt-=2; //decrements by 2 since the number is not a multiple of 2 (already checkef) so it will not be divided by an even number
return nb_sqrt==1;
}
关于C 项目欧拉数素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41401403/
所以目标是在一个20X20的方格上,下,左,右,对角线上,求出4个连续数的最大乘积。所以我把所有的代码都写在这里,但我知道我的结果是不正确的,因为我已经手工检查过了。似乎我的程序的对角线检查代码不正确
如何在 Objective-C 中实现欧拉数 (e)? 最佳答案 M_E , 在 中声明, 是欧拉数的值。您可以使用 exp()函数,也在 math.h 中声明计算e^x . 关于iphone -
如何在 python 2.7 中编写 x.append(1-e^(-value1^2/2*value2^2))? 我不知道如何使用幂运算符和e。 最佳答案 您可以使用 exp(x) math的功能库,
我是一名优秀的程序员,十分优秀!