Luoyoooo

与其感慨路难行,不如马上出发

[数字逻辑]7-3 自守数 (15分)

数学的世界有很多很漂亮的数字或者数字集合,比如梅森数,哥德巴赫猜想,水仙花数,完全数,自守数。今天我们就一起来探究一下自守数。自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 = 625,76^2 = 5776,9376^2 = 87909376。请求出n以内的自守数的个数

输入格式:

第一行输入n,随后输入n个数m。

输出格式:

在一行中输出m以内自守数的个数,所有输出在一行内完成,末尾没有多余空格。

输入样例:

5
1
2
3
4
5

输出样例:

2 2 2 2 3

 

思路:①判断自守数:积对10n得到后两位,加以判断

        ②先判断存进数组,时间会小很多

 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 #define maxN 100005
 5 int cnt[maxN];
 6 int main()
 7 {
 8     int N, M, MOD, i, k;
 9     vector<int> ans;
10     cnt[0] = 1;
11     cnt[1] = 2;
12     for (i = 2; i < maxN; i++)
13     {
14         cnt[i] = cnt[i - 1];
15         k = i;
16         MOD = 1;
17         while (k)
18         {
19             MOD = MOD * 10;
20             k = k / 10;
21         }
22         if ((i * i) % MOD == i)
23             cnt[i] ++;
24     }
25 
26     ans.clear();
27     scanf("%d", &M);
28     for (i = 0; i < M-1; i++)
29     {
30         cin >> N;
31         printf("%d ", cnt[N]);
32     }
33     cin >> N;
34     printf("%d\n", cnt[N]);
35     return 0;
36 }
posted @ 2020-01-19 21:57  Luoyoooo  阅读(1689)  评论(0)    收藏  举报