小光棍数
描述
最近Topcoder的XD遇到了一个难题,倘若一个数的三次方的后三位是111,他把这样的数称为小光棍数。他已经知道了第一个小光棍数是471,471的三次方是104487111,现在他想知道第m(m<=10000000000)个小光棍数是多少?
-
输入
- 有多组测试数据。第一行一个整数n,表示有n组测试数据。接下来的每行有一个整数m。 输出
- 输出第m个小光棍数。 样例输入
-
1 1
样例输出
-
471
来源
- 原创 上传者
- wmnwmn
-
-
- C++代码实现:
- (1)一般且超时的算法,可借此看出规律的算法:
-
-
long long m;
cin>>m;
long long j=471,t=0,r=0;
for(int i=0;i<m;j++)
{
t=j;
for(int p=0;p<2;p++)
{
t%=1000;
t*=j;
}
t%=1000;
if(t==111)
{
i++;
r=j;
}
}
cout<<r<<endl;
-
- (2)运行,试数,看出规律后给出的算法:
-
-
long long m;
cin>>m;
long long r=(m-1)*1000+471;
cout<<r<<endl;
-
- 上述都只为在输入一个m时的算法。
-
-
-