居然忘了每次做完题目贴出心得体会!现在才想起来自己忘了总结了。
这道题目的意思是:给你一个N个女同学的环,问你:请给出一个最大的K,使得K个人传球,每个人都能摸到球,题目很好理解,请结合样例。(注意格式控制)
我做出来的比较慢,一看范围那么大,我就觉得应该是一个简单的数学推导的题目,但是当时就是没有绕开圈子,倒最后才最终找出规律。其实大家只要是仔细想过这题目的话,正确的思路就应该是奇偶分情况:奇数不用说,直接就是N/2取下整就是了。但是偶数的时候就比较麻烦了。需要自己多做几次演算才可以得出结论,切记演算,切记演算,其实这里是有个结论的,那就是与N/2互质的最大的数就是结果。我很想看看别人的C++这些是怎么写的。(以前居然都没有想这样的方法,自己太笨了,不知道取长补短)
别的就不说了,自己用java写的,大家可以看看。
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] agrs) {
Scanner input = new Scanner(System.in);
int t = input.nextInt();
BigInteger n, m;
BigInteger E = BigInteger.valueOf(1);
boolean first = true;
while (input.hasNext()) {
n = input.nextBigInteger();
if (first == false) {
System.out.println();
}
first = false;
if (n.mod(BigInteger.valueOf(2)) == BigInteger.valueOf(0)) {
m = n.divide(BigInteger.valueOf(2));
for ( ; ; m = m.subtract(BigInteger.valueOf(1))) {
if (n.gcd(m).equals(E)) {
System.out.println(m);
break;
}
// System.out.println(m);
/*
try {
th.sleep(1000);
} catch (Exception e) {
}
*/
}
/*
while (n.gcd(m) == E) {
System.out.println("gcd = " + n.gcd(m));
m = m.subtract(BigInteger.valueOf(1));
System.out.println("m = " + m);
try {
th.sleep(1000);
} catch (Exception e) {
}
}
System.out.println(m);
*/
} else {
n = n.divide(BigInteger.valueOf(2));
System.out.println(n);
}
}
}
}
正好看到了typhon队的大数模版,我就拿来用吧,其实是没有java快速和函数多的。