51Nod - 1082 与7无关的数

一个正整数,如果它能被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就可以了。
先暴力打个表。

 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 }
View Code

 

posted @ 2018-07-27 09:22  Daybreaking  阅读(353)  评论(0编辑  收藏  举报