C++ 如何有效地估计SPOJ无平方数?
我尽了最大努力来解决Spoj问题,但我得到了(TLE)。请告诉我如何接近。我找不到合适的方法。这是我的密码: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)
#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数组中运行,以抵消浪费的时间。