[数字逻辑]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 }

浙公网安备 33010602011771号