平方的另一种方法

时间:2018-11-19 18:21:02

标签: python python-3.x algorithm

几年前,我想到了这项技术。似乎工作正常。

输入:一个数字

输出:其平方

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

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   等等...

这里要注意的一件有趣的事是,所有造成问题的数字都是奇数。