Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何有效地估计SPOJ无平方数?_C++ - Fatal编程技术网

C++ 如何有效地估计SPOJ无平方数?

C++ 如何有效地估计SPOJ无平方数?,c++,C++,我尽了最大努力来解决Spoj问题,但我得到了(TLE)。请告诉我如何接近。我找不到合适的方法。这是我的密码: #include <bits/stdc++.h> using namespace std; #define size 10000004 int mark[size+1]; void sieve() { for(int i=2,k;(k=i*i)<=size;++i) { for(int j=k;j<=size;j=j+k)

我尽了最大努力来解决Spoj问题,但我得到了(TLE)。请告诉我如何接近。我找不到合适的方法。这是我的密码:

#include <bits/stdc++.h>
using namespace std;

#define size 10000004
int mark[size+1];

void sieve()
{
    for(int i=2,k;(k=i*i)<=size;++i)
    {
        for(int j=k;j<=size;j=j+k)
            mark[j]=-1;
    } 
}

int fn(int a,int b,int c)
{
    int i,j,k,cnt=0;
    for(i=a;i<=b;++i)
    {
        j=i;
        if(mark[j]!=-1)
        {
            while(j>0)
            {
                if(j%10==c)
                {
                    cnt+=1;
                    break;
                }
                else
                    j=j/10;
            }
        }
    }
    return cnt;
}

int main()
{
    sieve();
    int t,a,b,c;
    cin>>t;
    for(int i=0;i<t;t++)
    {
        cin>>a>>b>>c;
        cout<<fn(a,b,c)<<endl;
    }
} 
#包括
使用名称空间std;
#定义大小10000004
整数标记[大小+1];
空隙筛()
{
对于(int i=2,k;(k=i*i)t;
对于(inti=0;i>a>>b>>c;

cout1.为不超过最大输入数平方根的素数预计算素数表(在您的例子中为sqrt(100000));2.对于范围[a,b]中的每个非素数,使用素数表计算原始分解,一旦任何原始分量的幂为2,就提前中断。您的程序中有几个问题-(1)你可能(a,b)的范围太宽了-10000004而不是100000,(2)每一个数字都会在大的seived数组中运行,以抵消浪费的时间。