“为什么是%“用于循环”;与求和算法相比,内存相对昂贵吗? 我一直在做C++编程,在黑客排名中做了一些编程测试,特别是使用3和5倍数的项目Euler ++集成问题(第一个问题)。我尝试使用模(%)运算符执行“暴力”算法。但是,我收到了一个超时,在论坛上阅读时,for循环中的%比应用求和算法要昂贵得多。 编辑[2015年12月23日]-------------- 我意识到我的前一个问题“虽然两者都是蛮力,但如何使模运算的内存比超时更昂贵?”应该被视为一个空洞的问题,因为我没有意识到求和算法是蛮力算法。根据评论部分的摘要,不同的用户评论说%肯定不是导致超时的原因,因为模运算符非常轻量级。根据用户Ishamael的说法,我发现我的解决方案: #include <cmath> #include <cstdio> #include <vector> #include <iostream> #include <algorithm> using namespace std; int main() { int T; cin >> T; int sum, num; for (int i = 0; i < T; i++) { sum = 0; num = 0; cin >> num; for (int j = 0; j < num; j++) { if ((j % 3 == 0) || (j % 5 == 0)) { sum += j; } } cout << sum << endl; } return 0; } #包括 #包括 #包括 #包括 #包括 使用名称空间std; int main(){ int T; cin>>T; 整数和,num; for(int i=0;i>num; 对于(int j=0;jnum; 如果(num>0)num=num-1; 长n3=地板(数量/3); 长n5=地板(数量/5); 长n15=地板(数量/15); 总和=(n3*(n3+1)/2*3+((n5*(n5+1)/2)*5)-(n15*(n15+1)/2)*15); cout

“为什么是%“用于循环”;与求和算法相比,内存相对昂贵吗? 我一直在做C++编程,在黑客排名中做了一些编程测试,特别是使用3和5倍数的项目Euler ++集成问题(第一个问题)。我尝试使用模(%)运算符执行“暴力”算法。但是,我收到了一个超时,在论坛上阅读时,for循环中的%比应用求和算法要昂贵得多。 编辑[2015年12月23日]-------------- 我意识到我的前一个问题“虽然两者都是蛮力,但如何使模运算的内存比超时更昂贵?”应该被视为一个空洞的问题,因为我没有意识到求和算法是蛮力算法。根据评论部分的摘要,不同的用户评论说%肯定不是导致超时的原因,因为模运算符非常轻量级。根据用户Ishamael的说法,我发现我的解决方案: #include <cmath> #include <cstdio> #include <vector> #include <iostream> #include <algorithm> using namespace std; int main() { int T; cin >> T; int sum, num; for (int i = 0; i < T; i++) { sum = 0; num = 0; cin >> num; for (int j = 0; j < num; j++) { if ((j % 3 == 0) || (j % 5 == 0)) { sum += j; } } cout << sum << endl; } return 0; } #包括 #包括 #包括 #包括 #包括 使用名称空间std; int main(){ int T; cin>>T; 整数和,num; for(int i=0;i>num; 对于(int j=0;jnum; 如果(num>0)num=num-1; 长n3=地板(数量/3); 长n5=地板(数量/5); 长n15=地板(数量/15); 总和=(n3*(n3+1)/2*3+((n5*(n5+1)/2)*5)-(n15*(n15+1)/2)*15); cout,c++,algorithm,C++,Algorithm,外环是冗余的。 我还删除了控制台阅读,因为它的用途还不清楚。您可以修改它以获得更通用的解决方案 #include <cmath> #include <cstdio> #include <vector> #include <iostream> #include <algorithm> using namespace std; int main() { int T; T = 1000; // Can be replace

外环是冗余的。 我还删除了控制台阅读,因为它的用途还不清楚。您可以修改它以获得更通用的解决方案

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    int T;
    T = 1000; // Can be replaced with cin >> T
    int sum;
    sum = 0;
    for (int j = 0; j < T; j++) {
        if ((j % 3 == 0) || (j % 5 == 0)) {
            sum += j;
        }
    }
    cout << sum << endl;
    return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
int T;
T=1000;//可替换为cin>>T
整数和;
总和=0;
对于(int j=0;j我想你是在谈论这个问题:

如果是,请注意
N
最多为
10^9
。黑客级别的解决方案预计会很快完成,这意味着它应该在几秒钟内完成。你的暴力解决方案很可能不会在2秒钟内完成-尝试将其作为输入传递
100000000
,并测量它需要多少时间


这个问题需要一个人思考,并提出一个非常有效的解决方案(没有循环),而不是实施暴力方法。

%
是一个固定时间操作。循环不是。因此
%
比大多数循环都快。您需要提供一个引用。请发布一个。这将更容易理解您所描述的内容。
%
非常容易记忆,事实上,它通常都不会触及RAM。此外,
%
和嵌套循环太不相似了,无法进行比较。我们需要更多的上下文来理解您所说的内容。为什么您认为您甚至会遇到内存问题?@Mehrdad这里没有浮点模。浮点除法指令通常只给出作为浮点的精确商整数模运算。是的,整数模运算实际上是英特尔CPU上的除法指令,所以它比任何其他整数运算都慢,但我们仍然在谈论纳秒。@reirab:有一个浮点模运算;只是它不是
%
。甚至还有。外循环是超差的nt测试用例。在阅读
T
之后,您应该阅读计算总和的
T
数字。(然而,在某种程度上,外部循环是冗余的,因为您反复进行相同的计算。当您计算1000的总和时,您已经计算了途中所有较小数字的总和。)但T被假定为“测试案例”现在我明白了,很多输入都可以给出。我在这里提出的是一个解决方案,以欧莱里项目为基础。我假设海报的解决方案将在几秒钟内轻松完成,但预计会在一微秒左右的时间内完成。
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    int T;
    T = 1000; // Can be replaced with cin >> T
    int sum;
    sum = 0;
    for (int j = 0; j < T; j++) {
        if ((j % 3 == 0) || (j % 5 == 0)) {
            sum += j;
        }
    }
    cout << sum << endl;
    return 0;
}