一个正整数,如果它能被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
一开始没有什么思路,以为是什么特殊的数,后来才想起来给的数并不大,直接暴力判一下数的每一位是否有7就可以了。
先暴力打个表。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<math.h> 5 #include<algorithm> 6 #include<queue> 7 #include<stack> 8 #include<deque> 9 #include<iostream> 10 using namespace std; 11 long long ans[1000009]; 12 void init() 13 { 14 long long i,p,j; 15 long long sum=0; 16 for(i=1;i<=1000007;i++) 17 { 18 j=i; 19 if(j%7!=0) 20 { 21 while(j) 22 { 23 p=j%10; 24 if(p==7) 25 break; 26 j/=10; 27 } 28 if(j==0) 29 { 30 sum+=i*i; 31 ans[i]=sum; 32 } 33 else 34 ans[i]=sum; 35 } 36 else 37 ans[i]=sum; 38 } 39 } 40 int main() 41 { 42 int i,p,j; 43 int t,n; 44 long long sum; 45 init(); 46 scanf("%d",&t); 47 for(i=1;i<=t;i++) 48 { 49 scanf("%d",&n); 50 printf("%lld\n",ans[n]); 51 } 52 return 0; 53 }