回答編集履歴

1

コードの修正

2018/08/22 22:40

投稿

退会済みユーザー
test CHANGED
@@ -6,11 +6,11 @@
6
6
 
7
7
  ![イメージ説明](5fe71218caba3e7367508c2f17bb1006.png)
8
8
 
9
-
9
+ ~~
10
10
 
11
11
  また、f(n) = n ^ 2 + an + bが f(n) = (n + i)(n + j)のように因数分解できる形だと素数にならないので2次方程式の解と係数の関係を使ってa,bの取りうる値をさらに絞り込みました。
12
12
 
13
- (結果的にこれがなくても求められましたが、処理速度は上がると思います...)
13
+ (結果的にこれがなくても求められましたが、処理速度は上がると思います...)~~
14
14
 
15
15
  ごれを踏まえ、以下のようなメソッドを用意しました。
16
16
 
@@ -18,7 +18,7 @@
18
18
 
19
19
  - n ^ 2 + an + bを出力するメソッド
20
20
 
21
- - f(n)が因数分解されるかどうか判定するメソッド
21
+ ~~- f(n)が因数分解されるかどうか判定するメソッド~~
22
22
 
23
23
  - 求める長さを求めるメソッド (while文を使って合成数になった瞬間打ち切ればOK!!)
24
24
 
@@ -26,33 +26,33 @@
26
26
 
27
27
  ```java
28
28
 
29
+
30
+
29
31
  public class Main {
32
+
33
+
30
34
 
31
35
  public static void main(String[] args){
32
36
 
33
-
37
+
34
38
 
35
39
  int []max_data = new int[3];
36
40
 
37
41
  String []text = {"a","b","length"};
38
42
 
39
-
43
+
40
44
 
41
45
  for(int a = 999; a >= -999; a -= 2){
42
46
 
43
- for(int b = 999; b >= 0; b -= 2){
47
+ for(int b = 999; b >= 3; b -= 2){
44
48
 
45
- if(check_func(a,b) && is_prime(b)){
49
+ if(is_length(a,b) > max_data[2]){
46
50
 
47
- if(is_length(a,b) > max_data[2]){
51
+ max_data[2] = is_length(a,b);
48
52
 
49
- max_data[2] = is_length(a,b);
53
+ max_data[0] = a;
50
54
 
51
- max_data[0] = a;
52
-
53
- max_data[1] = b;
55
+ max_data[1] = b;
54
-
55
- }
56
56
 
57
57
  }
58
58
 
@@ -70,13 +70,19 @@
70
70
 
71
71
  System.out.println("積は" + answer);
72
72
 
73
-
73
+
74
74
 
75
75
  }
76
76
 
77
77
  public static boolean is_prime(int n)
78
78
 
79
79
  {
80
+
81
+ if(n <= 1){
82
+
83
+ return false;
84
+
85
+ }
80
86
 
81
87
  for(int i = 2; i <= (int)Math.sqrt(n); i++){
82
88
 
@@ -100,27 +106,11 @@
100
106
 
101
107
  }
102
108
 
103
- public static boolean check_func(int a, int b)
109
+
104
-
105
- {
106
-
107
- for(int i = 1; i <= b; i++){
108
-
109
- if(i + b / i == a){
110
-
111
- return false;
112
-
113
- }
114
-
115
- }
116
-
117
- return true;
118
-
119
- }
120
110
 
121
111
  public static int is_length(int a, int b){
122
112
 
123
-
113
+
124
114
 
125
115
  int length = 0;
126
116
 
@@ -136,6 +126,10 @@
136
126
 
137
127
  }
138
128
 
129
+
130
+
131
+
132
+
139
133
  }
140
134
 
141
135
 
@@ -144,4 +138,4 @@
144
138
 
145
139
  <実行結果>
146
140
 
147
- a = -999 b = 61 length = 1011 積は-60939
141
+ a = -61 b = 971 length = 71 積は-59231