[刷题] 自守数

要求:如果某数平方的末尾等于这个数,那么就称这个数为自守数
思路:x为待求数,n为x的十进制位数,将x平方后对10^n求模,所得数等于x,则x为自守数

matlab程序:

 1 %普通方法
 2 tic;
 3 index = 0;
 4 data = zeros(1,100);
 5 for i = 5:100000
 6     n = 1 + floor(log10(i));
 7     if i == mod(i^2,10^n)
 8         index = index + 1;
 9         data(index) = i;
10     end
11 end
12 answer = data(1:index)
13 toc

体会向量化的威力:

1 %向量化方法(快10倍)
2 tic;
3 x = 5:100000;
4 y = mod(x.^2,10.^(1 + floor(log10(x))));
5 x(x == y)
6 toc
原文地址:https://www.cnblogs.com/cxc1357/p/10812148.html