-
输入
- 有多组测试数据。第一行一个整数n,表示有n组测试数据。接下来的每行有一个整数m。 输出
- 输出第m个小光棍数。 样例输入
-
1 1
样例输出 -
471
-
import java.util.*; public class Main { public static void main(String[] args) { Scanner in= new Scanner(System.in); int n=in.nextInt(); while(n-->0){ long m=in.nextLong(); System.out.println((471+1000*(m-1))); } } }
这个题太搞笑了,我一开始采用暴力求解,后来输出结果后发现有规律,索性我就直接按照结果的规律直接输出了,这样真是太简单了,这里我附上原来的笨法: -
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
int n=in.nextInt();
while(n-->0){
long m=in.nextLong();
long num=0;
int cnt=0;
while(true){
if(num*num*num%1000==111)
cnt++;
if(cnt==m)
break;
num++;
}
System.out.println(num);
}
}
}
-
好吧,我又来补充啦,原来这题利用的是同余定理,好波,来补一波知识吧:
-
数学上的记法为:a≡ b(mod d)对于同余有三种说法都是等价的,分别为:(1) a和b是模d同余的.(2) 存在某个整数n,使得a=b+nd .(3) d整除a-b.所以这题相当于num≡471(1000),所以num=471+1000*k;
-
村里人我又长见识了,嘻嘻!
-
小光棍数
最新推荐文章于 2021-03-14 22:52:17 发布
描述
最近Topcoder的XD遇到了一个难题,倘若一个数的三次方的后三位是111,他把这样的数称为小光棍数。他已经知道了第一个小光棍数是471,471的三次方是104487111,现在他想知道第m(m<=10000000000)个小光棍数是多少?