要求:如果某数平方的末尾等于这个数,那么就称这个数为自守数
思路: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