首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C 数学有关问题

2013-04-20 
C数学问题最近Topcoder的XD遇到了一个难题,倘若一个数的三次方的后三位是111,他把这样的数称为小光棍数。他

C 数学问题
最近Topcoder的XD遇到了一个难题,倘若一个数的三次方的后三位是111,他把这样的数称为小光棍数。他已经知道了第一个小光棍数是471,471的三次方是104487111,现在他想知道第m(m<=10000000000)个小光棍数是多少?

为什么第M个数 这样表示:
(m-1)*1000+471  
[解决办法]
程序证明:


#include<iostream>
using namespace std;

int main()
{
for(int i=0;i<1000;i++)
if((i*i*i)%1000 == 111)
cout<<i<<endl;
return 0;
}

结果只有一个471。
[解决办法]
(x+y)^3 =x(x^2+ 3xy + 3y^2)+y^3
令x=(m-1)*1000, y = 471, 则对最后三位数产影响的部分x(x^2+ 3xy + 3y^2)+y^3,已经知道y^3的后三位数是111
而x(x^2+ 3xy + 3y^2)+y^3)为1000*z(z为自然数)

热点排行