几年前,我想到了这项技术。似乎工作正常。
输入:一个数字
输出:其平方
x=int(input("Enter the number whose square you wish to find out: ")) #decimal input invalid
last_digit=x%10
#We will use formula Sn= (n/2)*(2a+ (n-1)d) of AP
a=100 + last_digit*20 #100,20 are fixed values
d=200 #200 is a fixed value
n=(x-last_digit)/10
final_answer=(n/2)*(2*a + (n-1)*d) + last_digit**2 #These calculations are easier than x*x for a vvlarge x
#normal multiplication is d*d digits, but this is d*(d-1) or d*(d-2) digits
print("My answer: " ,format(final_answer,'f'))
print("Actual answer: ", x**2)
我已经写了评论以指示我在每个步骤中所做的事情
->这是如何工作的?喜欢认真吗?我通过观察一些模式并对它们进行概括来得到 ->该代码仅适用于3位数字,但适用于所有数字。怎么样?
通过扩展/替换,我的“派生”如下:-
注意:L =最后一位
n =(x-L)/ 10#与n = x // 10
相同a = 100 + 20L
d = 200
我们的最终答案是:-
=>(n / 2)*(2a +(n-1)d)+ L ^ 2
用值代替变量
=> [(x-L)/ 20] * [200 + 40L + [(x-L)/ 10] * 200-200] + L ^ 2
在[(x-L)/ 20]中取20,并将其带到*符号的RHS中,
=>(x-L)* [10 + 2L + x-L -10] + L ^ 2
=>(x-L)*(x + L)+ L ^ 2
=> x ^ 2-L ^ 2 + L ^ 2
=> x ^ 2
答案 0 :(得分:0)
您的代码未提供10到19的正确输出,并且
仅当x // 10为2的倍数时才给出正确的输出,因为此表达式(n/2)*(2*a + (n-1)*d) + last_digit**2
具有n/2
。
对于其余的测试用例,它给出了大概的答案。
并展开条款,您将得到x^2((2*last_digit/x) + 1)
,现在很明显为什么这些魔术数字给出了正确的输出。
答案 1 :(得分:0)
您的算法因大量失败。我只对整数尝试过,这是结果不同的一些整数的列表-
94906267 94906269 94906271 等等...
这里要注意的一件有趣的事是,所有造成问题的数字都是奇数。