- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我如何找到小于 200 万的所有素数的总和?欧拉计划第十题,http://projecteuler.net/problem=10 .我测试了我的代码低于 10 并且工作得很好。但是低于 200 万似乎不起作用:/已经大约 15 分钟了,而且还在继续,我认为不应该花那么长时间,对吗?我将尝试 sum 函数,但我仍然不明白为什么它不起作用?
编辑:我想我不能使用 sum 函数,因为数字甚至没有存储在数组中:/
我的代码:
#include <iostream>
using namespace std;
int main()
{
unsigned long long x,y,z=0,s[200000],a,sum=0;
bool isprime;
for(x=3;x<2000000;x++)
{
for(y=2;y<x;y++)
{
if(x%y!=0 && x!=y)
{
isprime =true;
}
else
{
isprime =false;
break;
}
}
if(isprime ==true)
{
s[z] = x;
z++;
isprime = false;
}
}
cout<<z;
for(a=0;a<z;a++)
{
sum=sum+s[a];
cout<<"Sum is being calculated "<<sum<<"\n";
}
cout<<"The sum is "<<sum+2<<" LADIES";
}
最佳答案
你的问题是你的程序会检查太多不必要的除数。
为了检查给定整数是否为素数,您需要检查它是否没有小于或等于其平方根的除数。因为,如果有一个大于平方根的除数,商就是一个整数,并且小于平方根。
#include <iostream>
using namespace std;
int main()
{
unsigned long long x,y,z=0,s[200000],a,sum=0;
bool isprime;
for(x=3;x<2000000;x++)
{
for(y=2; y*y <= x ;y++)
{
if(x%y!=0 && x!=y)
{
isprime =true;
}
else
{
isprime =false;
break;
}
}
if(isprime ==true)
{
s[z] = x;
z++;
isprime = false;
}
}
cout<<z;
for(a=0;a<z;a++)
{
sum=sum+s[a];
cout<<"Sum is being calculated "<<sum<<"\n";
}
cout<<"The sum is "<<sum+2<<" LADIES";
您可以改用 vector :
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
unsigned long long x,y;
std::vector<unsigned long long> primes;
bool isprime = true;
for(x=3; x<2000000; x++)
{
isprime = true;
for(y=2; y*y <= x ;y++)
{
if(x%y==0 || x==y)
{
isprime=false;
break;
}
}
if(isprime)
{
primes.push_back(x);
}
}
unsigned long long sum = 2 + std::accumulate(v.begin(), v.end());
cout<<"The sum is "<<sum<<" LADIES";
}
关于c++ - 2000000 以下的质数之和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16106171/
我知道这不是寻找素数的最佳方法,也不是最有效的方法;但是,我似乎无法找到 169 算作素数的原因(就我而言,对于较小的数字,它可以正常工作)。 public static int checkPrime
有人可以指导我获取素数吗?这是家庭作业,所以我不想要答案,但一些指示将不胜感激。这真的让我很烦:( 我想我很接近。但是我遇到的问题是数字 25 和 35。它们不是质数,但是这个函数正在返回它们 var
利用正则判别素数,来源于网络,神人! 复制代码 代码如下: Set regex = New RegExp regex.Pattern = "^1?$&b
质数又称素数。一个大于1的自然数,如果除了1和它自身外,不能被其他自然数整除的数;否则称为合数。根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积;而且如果不考虑
我在 Ruby on Rails 中尝试如何找到质数。这是我的代码: 助手:app/helpers/test_helper.rb module TestHelper
lower = int(input("from:")) upper = int(input("to:")) for num in range(lower,upper + 1): if num >
最近我对 LINQ 很感兴趣。我正在尝试获取质数。我实际上做得很好,但我的代码没有显示低于 Sqrt(n) 的素数。 static void Main(string[] args) {
在尝试设计算法时,我偶然发现了这个问题。这不是家庭作业。 令 P_i = 前 i 个素数的数组。现在我需要最小的 i 这样 Sum 1 / (P_i[n]*P_i[n]) >= 1. (如果这样的
本文已收录到 AndroidFamily ,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周跟大家讲到小彭文章风格的问题,和一些朋友聊过以后,
我是新来的。我正在尝试解决此练习 Problem 18只是为了加强我的解决能力。我已经编码了答案。该任务要求“在 1,000,000 以下的质数中,有多少个数位之和等于两周中的天数?” (两周是 14
我是一名优秀的程序员,十分优秀!