回答編集履歴

5

unsigned だけで行けるみたいです。

2020/05/04 11:51

投稿

PingHermit
PingHermit

スコア478

test CHANGED
@@ -88,9 +88,9 @@
88
88
 
89
89
  }
90
90
 
91
- // 超過するのを忘れていたので、unsigned long long か、double にしてください。
91
+ // 超過するのを忘れていたので、もうちょっと大きな型にしてください。
92
92
 
93
- for (i = 5; (unsigned long long)i * i <= n; i += 4) {
93
+ for (i = 5; (unsigned)i * i <= n; i += 4) {
94
94
 
95
95
  if (n % i == 0) {
96
96
 

4

ちょっと間違っていたので、修正

2020/05/04 11:51

投稿

PingHermit
PingHermit

スコア478

test CHANGED
@@ -88,7 +88,9 @@
88
88
 
89
89
  }
90
90
 
91
+ // 超過するのを忘れていたので、unsigned long long か、double にしてください。
92
+
91
- for (i = 5; i * i <= n; i += 4) {
93
+ for (i = 5; (unsigned long long)i * i <= n; i += 4) {
92
94
 
93
95
  if (n % i == 0) {
94
96
 

3

はやくしたつもり。ここは、考えてほしかったとこだけど。

2020/05/04 11:43

投稿

PingHermit
PingHermit

スコア478

test CHANGED
@@ -43,3 +43,101 @@
43
43
  }
44
44
 
45
45
  ```
46
+
47
+ こんなんでいいかな?
48
+
49
+ ```
50
+
51
+ #include <stdio.h>
52
+
53
+ int main()
54
+
55
+ {
56
+
57
+ int f[9];
58
+
59
+ int i, n, c = 0;
60
+
61
+ scanf("%d", &n);
62
+
63
+ if (n % 2 == 0) {
64
+
65
+ do
66
+
67
+ n /= 2;
68
+
69
+ while (n % 2 == 0);
70
+
71
+ f[c] = 2;
72
+
73
+ c++;
74
+
75
+ }
76
+
77
+ if (n % 3 == 0) {
78
+
79
+ do
80
+
81
+ n /= 3;
82
+
83
+ while (n % 3 == 0);
84
+
85
+ f[c] = 3;
86
+
87
+ c++;
88
+
89
+ }
90
+
91
+ for (i = 5; i * i <= n; i += 4) {
92
+
93
+ if (n % i == 0) {
94
+
95
+ do
96
+
97
+ n /= i;
98
+
99
+ while (n % i == 0);
100
+
101
+ f[c] = i;
102
+
103
+ c++;
104
+
105
+ }
106
+
107
+ i += 2;
108
+
109
+ if (n % i == 0) {
110
+
111
+ do
112
+
113
+ n /= i;
114
+
115
+ while (n % i == 0);
116
+
117
+ f[c] = i;
118
+
119
+ c++;
120
+
121
+ }
122
+
123
+ }
124
+
125
+ if (n > 1) {
126
+
127
+ f[c] = n;
128
+
129
+ c++;
130
+
131
+ }
132
+
133
+ printf("%d\n\n", c);
134
+
135
+ for (i = 0; i < c; i++)
136
+
137
+ printf("%d\n", f[i]);
138
+
139
+ return 0;
140
+
141
+ }
142
+
143
+ ```

2

個数表示でしたね、忘れてましたので、追加です。

2020/05/04 09:31

投稿

PingHermit
PingHermit

スコア478

test CHANGED
@@ -32,6 +32,8 @@
32
32
 
33
33
  }
34
34
 
35
+ printf("%d\n\n",c);
36
+
35
37
  for (i = 0; f[i]; i++)
36
38
 
37
39
  printf("%d\n", f[i]);

1

個数表示でしたね、忘れてましたので、追加です。

2020/05/04 04:52

投稿

PingHermit
PingHermit

スコア478

test CHANGED
File without changes