一个正整数,如果它能被7整除,或者它的十进制表示法中某个位数上的数字为7,则称其为与7相关的数。求所有小于等于N的与7无关的正整数的平方和。
例如:N = 8,<= 8与7无关的数包括:1 2 3 4 5 6 8,平方和为:155。
Input第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 1000)
第2 - T + 1行:每行1个数N。(1 <= N <= 10^6)Output共T行,每行一个数,对应T个测试的计算结果。Sample Input
5 4 5 6 7 8
Sample Output
30 55 91 91 155
题解:先将1000以内与7有关的数打个表,用sum[i],记录前i个数与7有关数的平方和(前缀和),接下来n次查询即可
1 #include<cstring> 2 #include<cstdio> 3 #include<algorithm> 4 #define Inf 0x3f3f3f3f 5 #define ll long long 6 using namespace std; 7 ll sum[1000003]; 8 int main() 9 { 10 ll i,j,m,n,t,k; 11 memset(sum,0,sizeof(sum)); 12 for(i=1;i<=1000001;i++) 13 { 14 ll flag=0; 15 if(i%7==0) 16 flag=1; 17 else 18 { 19 k=i; 20 while(k) 21 { 22 if(k%10==7) 23 { 24 flag=1; 25 break; 26 } 27 k/=10; 28 } 29 30 } 31 if(!flag) 32 sum[i]=sum[i-1]+i*i; 33 else 34 sum[i]=sum[i-1]; 35 36 37 } 38 scanf("%lld",&m); 39 while(m--) 40 { 41 scanf("%lld",&n); 42 printf("%lld ",sum[n]); 43 } 44 return 0; 45 46 47 }
平方和