我这个题试了好久最后一个点一直A不了,优化了好久,最快的一次这个题总共用了3.44s,但最后一个还是不行……
下面是最后一次交的代码,大佬们帮帮看看
#include<iostream>
#include<cmath>
using namespace std;
bool zhishu(long long m){
double a=sqrt(m);
for(int i=2;i<=a;i++){
if(m%i==0) return false;
}
return true;
}
bool f(long long m){
int n,sum=0;
while(m>0){
n=m%10;
sum+=n;
m=m/10;
}
if(zhishu(sum)==0) return false;
if(zhishu(sum)==1) return true;
}
int n;
long long l[105],r[105],minn=100000005,maxn=0;
long long ans=0;
bool judge[100000005];
long long cnt=1,x[10000005];
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>l[i]>>r[i];
minn=min(l[i],minn);
maxn=max(r[i],maxn);
}
if(minn=1) minn=2;
if(maxn==100000000) maxn=99999989;
for(int i=minn;i<=maxn;i++){
if(judge[i]==1) continue;
for(int j=2;i*j<=maxn;j++){
if(judge[i*j]==1) continue;
judge[i*j]=1;
}
if(zhishu(i)==1&&f(i)==1){
x[cnt]=i;
cnt++;
}
}
for(int i=1;i<=n;i++){
ans=0;
for(int j=1;j<cnt;j++){
if(x[j]>=l[i]&&x[j]<=r[i]) ans++;
}
cout<<ans<<endl;
}
return 0;
}