Time complexity euler 1中测试用例的时间效率 在求解竞争规划问题时,我们需要考虑的问题是具有时效性的问题?

Time complexity euler 1中测试用例的时间效率 在求解竞争规划问题时,我们需要考虑的问题是具有时效性的问题?,time-complexity,big-o,Time Complexity,Big O,例如,在一个问题中,代码在^2上运行。这是考虑获取测试用例的循环 问题: 为什么代码在此问题中超时 如何使我的代码高效 这个问题的描述在链接中 #include <cmath> #include <cstdio> #include <vector> #include <iostream> #include <algorithm> using namespace std; int main() { /* Enter your

例如,在一个问题中,代码在^2上运行。这是考虑获取测试用例的循环

问题:

为什么代码在此问题中超时

如何使我的代码高效

这个问题的描述在链接中

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */  
    int t, n; 
    int n1,n2; 
    int mul3, mul5, sum=0,sum3=0,sum5=0;
    cin>> t;

    while(t--){

        cin>>n; 
        sum=0;
        sum5=0;
        sum3=0; 

        if(n%3==0)
                n1=n/3-1; 
        else
               n1=n/3; 

        if(n%5==0)
                n2=n/5-1; 
        else
            n2=n/5; 

        for(int i=0;i<=n1;i++){
            if(i<=n2){
                mul5= i*5; 
                sum5+=mul5;
            }
            mul3=i*3;
            if((mul3%5)!=0) 
            sum3+=mul3; 
            sum = sum3+sum5; 
        }
        cout << sum << endl; 

    }
    system("PAUSE"); 
    return 0;
}

您不需要迭代所有数字,而且对于n=10^9,您肯定无法执行n^2操作。正确的解决方案需要对数论和可被给定值整除的数的计数有一点了解。你能想出一种方法来计算5整除X的数吗?试着以恒定的复杂性来做到这一点。然后对可被3整除的数做类似的处理,并应用包含排除原理


请注意:优化代码无论效果如何,只会略微提高其性能。另一方面,改变算法可能会改变其复杂性数量级

也许看一下这里可以帮你找到O1解决方案。 对于这个问题,集合A由可被3整除的数组成,集合B由可被5整除的数组成。和∩B由可被3和5整除的数字组成。所以


这形成了一个算术级数。你可以用标准公式求出这个数的和。对其他2组进行同样的操作,您就完成了。

如果程序已经运行,那么在^2上的解决问题时发布它如何?令人印象深刻。我用算术级数的概念做了同样的事情
A={3,6,9,...,999}