#include <iostream>
#include <cmath>
int main(int argc, const char * argv[])
{
for (long i = 1; i > 0; i++) {
long n = i*i;
long x = n % 10;
long y = n / 10 % 10;
if (x % 2 != 0 && y % 2 != 0) {
std::cout << i << std::endl;
std::cout << n << " " << n % 100 << " " << y << " " << x << std::endl;
std::cout << "Number Found: " << n << std::endl;
break;
}
}
}
-- RESULT --
3037000501
-9223372030635300615 -15 -1 -5
Number Found: -9223372030635300615
我可能是错的,但我相信长度可能不足以存储答案。有人可以确认该程序正常运行并且长时间无法存储该号码,还是我错过了什么错误。或我完全错过的东西。
谢谢
我的印象是该数字不存在。
实际上,您只需要查找就可以了,i=50
因为它i * i % 100
是周期性的,周期为正好为50。因此,数字范围不是您遇到的问题。
所有在其最后一个位置的旁边都有奇数位的完美平方以6
(16,36,196,256,576等)结尾,这不是奇数。问题没有解决方法。没有以两位奇数结尾的完美平方。
这个周期的原因是任何数字都可以表示为
n = a * 50 + b , with 0 <= b < 50. In fact, by definition b = n % 50
然后,
n^2 % 100 =
( a*50 + b )^2 % 100 =
( (a*50)^2 + 2*b*a*50 + b^2 ) % 100 =
( a*a*2500 + b*a*100 + b^2 ) % 100 =
b^2 % 100 =
( n % 50 )^2 % 100
换句话说,的最后2位数字与n^2
的相同b^2
,其中0 <= b <50,特别是b = n%50。
实际上,您甚至不需要走到49,而只需走25:
( 50 - i )^2 % 100 =
( 50^2 - 2*50*i + i^2 ) % 100 =
( 2500 - 100*i + i^2 ) % 100 =
i^2 % 100
换一种说法
50^2 %100 = (50- 0)^2 %100 = 0^2 %100 = 0
49^2 %100 = (50- 1)^2 %100 = 1^2 %100 = 1
48^2 %100 = (50- 2)^2 %100 = 2^2 %100 = 4
...
27^2 %100 = (50-23)^2 %100 = 23^2 %100 = 29
26^2 %100 = (50-24)^2 %100 = 24^2 %100 = 76
25^2 %100 = (50-25)^2 %100 = 25^2 %100 = 25
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句