题目链接:
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1082
题解:
直接暴力, 把1e6的所有的数据进行预处理就行了(记得数据范围比较大,用long long)
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define met(a,b) memset(a,b,sizeof(a))
typedef long long ll;
const int maxn = 1e6;
ll num[maxn+10];
ll sum[maxn];
void init()
{
met(num,0);
for(ll i=1;i<=maxn;i++)
{
if(i%7==0)
num[i]=1;
}
for(ll i=1;i<=maxn;i++)
{
if(num[i])
continue;
else
{
int flag=0;
ll name=i;
while(name)
{
int temp=name%10;
if(temp==7)
{
flag=1;
break;
}
name/=10;
}
if(flag)
num[i]=1;
}
}
met(sum,0);
ll ans=0;
for(ll i=1;i<=maxn;i++)
{
if(num[i]==0)
ans+=i*i;
sum[i]=ans;
}
}
int main()
{
init();
int t;
scanf("%d",&t);
while(t--)
{
ll n;
scanf("%lld",&n);
printf("%lld\n",sum[n]);
}
}