众所周知,ZiP有一个室友叫老郭,是个满分帅气暖男,只是有个习惯是*狗。
然而老郭是一个强迫症患者,他*的狗必须满足以下条件:
首先他会把n只狗排成一排,从1到n依次编号。
接着他会让ZiP给他报一个整数m。
然后任意选出三只狗编号为x,y,z,如果能满足x^m+y^m=z^m(分别代表x,y,z的m次方),则会把狗*掉。
那么问题来了,对于n只狗,已经ZiP给定的一个数m,老郭有多少种可能*到狗?
Description
众所周知,ZiP有一个室友叫老郭,是个满分帅气暖男,只是有个习惯是*狗。
然而老郭是一个强迫症患者,他*的狗必须满足以下条件:
首先他会把n只狗排成一排,从1到n依次编号。
接着他会让ZiP给他报一个整数m。
然后任意选出三只狗编号为x,y,z,如果能满足x^m+y^m=z^m(分别代表x,y,z的m次方),则会把狗*掉。
那么问题来了,对于n只狗,已经ZiP给定的一个数m,老郭有多少种可能*到狗?
Input
多组测试数据(不超过10组),每组一行。
有2个数,第一个是n(1<=n<=5000),第二个是m(1<=m<=100)
Output
每组输出一行,代表老郭能*到狗的可能数。
Sample Input
3 1
1000 2
1000 1
Sample Output
1
881
249500
HINT
对于第一组样例,(1,2,3)满足,所以输出为1。
(1,2,3)和(2,1,3)视为同一组
这个,我试着做了一下,思路不太难,难的是如何优化算法,我觉得关键是查找这一步。我写的输入1000 2 的时候大概2s内求出 ,但是 输入 1000 1的时候,就要等好久。
先收藏了,以后再来看吧。
z必定能被x和y之和整除,利用这个减少乘法计算次数
直接枚举好像应该就可以了,但是肯定会TLE。。给一下时限,谢谢!