fork download
  1. /*
  2. プログラミングのお題スレ Part12
  3. //mevius.5ch.net/test/read.cgi/tech/1538096947/17
  4.  
  5. 17 名前:デフォルトの名無しさん[] 投稿日:2018/10/01(月) 20:03:33.29 ID:IziOBEHB
  6. お題:f(n)::={nを連続するいくつかの正整数の和として表す表し方の総数}とおく
  7. 例えば、15=7+8=4+5+6=1+2+3+4+5よりf(15)=4である
  8. 上限Nが与えられたとき、n<=Nでf(n)が奇数となるようなnをすべて足し合わせた値を求めよ
  9.  
  10. 10 -> 24
  11. 100 -> 665
  12. 1000 -> 18006
  13. 10000 -> 571940
  14. 100000 -> 18010994
  15. 1000000 -> 569929080
  16. 10000000 -> 18001029437
  17. 100000000 -> 569128815672
  18. 1000000000 -> 17994029079715
  19. */
  20.  
  21. class Ideone
  22. {
  23. public static void main (String[] args)
  24. {
  25. solve(10);
  26. solve(100);
  27. solve(1000);
  28. solve(10000);
  29. solve(100000);
  30. solve(1000000);
  31. solve(10000000);
  32. solve(100000000);
  33. solve(1000000000);
  34. }
  35.  
  36. static void solve(int n)
  37. {
  38. java.util.BitSet bitset = new java.util.BitSet(n);
  39. for (int i = 1, j = 1; j <= n; j += ++i) {
  40. for (int k = j; k <= n; k += i) {
  41. bitset.flip(k);
  42. }
  43. }
  44. System.out.printf("%d -> %d%n", n, bitset.stream().asLongStream().sum());
  45. }
  46. }
Time limit exceeded #stdin #stdout 5s 2317312KB
stdin
Standard input is empty
stdout
10 -> 24
100 -> 665
1000 -> 18006
10000 -> 571940
100000 -> 18010994
1000000 -> 569929080
10000000 -> 18001029437