这题离线打表可过,注意i*i如果不用long long 会WA
#include <cstdio> using namespace std; const int MAXN=1000010; bool num[MAXN]; long long ans[MAXN]; bool dig(long long n) { while(n) { if(n==7) return true; n/=10; } return false; } int main() { for(long long i=1;i<=MAXN;i++) { if(i%7==0) {num[i]=true;continue;} if(dig(i)) {num[i]=true;continue;} num[i]=false; } ans[0]=0; ans[1]=1; for(long long i=2;i<=MAXN;i++) { if(num[i]) ans[i]=ans[i-1]; else ans[i]=ans[i-1]+i*i; } long long t,n; scanf("%lld",&t); while(t--) { scanf("%lld",&n); printf("%lld\n",ans[n]); } return 0; }