ベルク・カッツェ |
増加量が10の倍数、3の倍数でないとうまくいかなそうなので、13、43、73、103、133と考えました。 |
12月16日(木) 0:10:30
51115 |
ベルク・カッツェ |
失礼しました、133は7の倍数なので間違いです。 |
12月16日(木) 0:14:03
51116 |
ベルク・カッツェ |
うっかり素数の数列にならなかったほうを書き込んでしまいました。
7、37、67、97、127です。 |
12月16日(木) 0:16:46
51117 |
UFO |
公差が 2, 3, 5 のいずれかの倍数でないと、必ず 2, 3, 5 のいずれかの倍数が 1 つ以上含まれそうだという直感を得る(後述)。また、特に公差を 30 と仮定すると、初項が 2, 3, 5 のいずれかであった場合はやはり 2, 3, 5 の倍数が含まれる。一方、7, 37, 67, 97, 127 は条件を満たすので、解の上界は 127。
公差が 2 の倍数でないと、必ず 2 でない 2 の倍数が含まれ、不適。 ・なぜなら、相異なる 2 の倍数が 2 個以上含まれるから。 公差が 3 の倍数でないと、必ず 3 でない 3 の倍数が含まれ、不適。 ・なぜなら、相異なる 3 の倍数が 2 個以上含まれないのは 3 番目が 3 の倍数であるときのみだが、このとき 1, 2, 3, 4, 5 である必要があり、素数の条件などに適さないから。 公差が 5 の倍数でないと、必ず 5 でない 5 の倍数が含まれ、不適。 ・なぜなら、このとき 5 の倍数はちょうど 1 つ含まれるが、これは 5 でなくてはならない。これが 2 番目から 5 番目のいずれかであった場合、5 番目の数が 100 以上にならない。1 番目の数が 5 であった場合、交差は 24 以上(5 番目の数が 100 以上だから)30 以下(5 番目の数の上界が 127 だから)を考えれば良い。この範囲にある 2 の倍数・3 の倍数・5 の非倍数は 24 だけだが、 (5, 29, 53, 77, 101) は 77 が素数でないため不適。 以上より示されました。10年以上前に初めて sansu.org を見てから、初めて 1 位になれたので、感無量です! |
12月16日(木) 0:18:11
51118 |
ベルク・カッツェ |
#51118UFOさん
1位おめでとうございます。 算チャレには0分台、1分台で解いてしまう上位陣が何人もいるので、勝つのは大変ですよね。 |
12月16日(木) 0:25:09
51119 |
スモークマン |
たまたま見つけたけど...
30=2*3*5 だから... 7 2*3*5+7=37 2*2*3*5+7=67 3*2*3*5+7=97 2^2*2*3*5+7=127 5*2*3*5+7=157・・・ここまで素数 2*3*2*3*5+7=187=11*17 で...結局たまたまみたいですね ^^; |
12月16日(木) 0:27:37
51120 |
UFO |
#51119 ベルク・カッツェ
ありがとうございます。ベルク・カッツェ さんは過去に 1 位になっているのを拝見したことがあり、すごいなと思っておりました。 |
12月16日(木) 0:30:24
51121 |
量子論 |
#51118
1位おめでとうございます。 ほぼ同じ解き方です。等差は2,3,5の倍数でないと、 オより小さい4つの中に、2, 3, 5の倍数が必ず含まれてしまう。 公差=30として、最初の数をア=7とすれば、オ=127 最初、ア=11として、ミスった。 |
12月16日(木) 0:30:59
51122 |
今年から高齢者 |
大きい方からX-d*n(n=0,1,2,3,4)なので、公差dは2*3*5の倍数以上だろうとは予想したが、その先が分からず、結局はbasicで
FOR x=101 TO 999 FOR y=2 TO x-1 LET a=x LET b=x-y LET c=x-2*y LET d=x-3*y LET e=x-4*y FOR z=2 TO x-1 IF z=a OR z=b OR z=c OR z=d OR z=e THEN GOTO 100 IF MOD(a*b*c*d*e,z)=0 THEN GOTO 200 100 NEXT Z PRINT e;d;c;b;a 200 NEXT Y NEXT X END |
12月16日(木) 1:05:57
51123 |
「数学」小旅行 |
山勘+Excel+認証 です。 |
12月16日(木) 7:25:05
51124 |
Shin Koba |
1から少なくとも200辺りまで、或いはもっと先まで、素数は2と3を除き、6の倍数の両隣り以外には存在しない。 これは受験算数の常識。理由は知らない。 ということは、差は6の倍数に限定される。 例えば5→11→17→23→29というように。 そこで5→17→29→41→53 なんちゃって。 5→23→41→59→77 ん? オーノー!! このとき、一の位が5であることは題意に矛盾することに気がついた。 5→23→41→59→77クソっ。 だから改めて、 一の位に目をつけた。 しかし、6の倍数の差なら1の位は 1→7→3→9→5× のループだから必ず一の位に0か5が登場しちゃう。 書いてもいいが面倒なのでやめておく。 じゃぁ6の倍数の差で5回目までに一の位に0か5の登場しないのはなにか。(もちろん偶数もダメよ) それは一の位が0の差であるとき、つまり差が最小で30の時だけである。 差が30の等差数列で、そんでもって5個続くのは1→31→61→91→121ダメ という形のみである。 1の位は1、3、7、9のいずれかで、 だがしかし、30×4=120が初めと最後の差であることに鑑みれば 3の倍数はこれに当たらない。 ここちょっと難しい理屈。 ゆえに残されるのは1か7である。 だから11+120=131 ちょっと待った。 7+120=127があったか〜! という風に導いた。 所詮、算数の世界では素数を高校数学的に導けないから、これが限界では無いかと思いました。 勘違いでしたら、大変申し訳ございません。 |
12月16日(木) 7:47:36
51125 |
ゴンとも |
Maxima で
for a:1 thru 999 do for b:1 thru 999 do (if primep(a)=true and primep(a+b)=true and primep(a+2*b)=true and primep(a+3*b)=true and primep(a+4*b)=true and a+4*b>99 and a+4*b<200 then print(a,a+b,a+2*b,a+3*b,a+4*b)); enter 押して 5 47 89 131 173 5 53 101 149 197 7 37 67 97 127 11 41 71 101 131 37 67 97 127 157 より オ=127・・・・・・(答え) 数式処理に素数判定(Maximaだとprimep)があるのでもっと大きい数でも根こそぎ だしてくれますが人力だとひどく大変だと・・・ 昨夜は1時間前ぐらいに眠ってしまいました!! |
豊川市
12月16日(木) 10:15:15
MAIL:fttnm528@ybb.ne.jp 51126 |
「数学」小旅行 |
Rubyでも同様にしてみました。
200までの素数5個の列で等差になるものを出してみました。 require 'prime' p Prime.each(200).to_a.combination(5).select{|a,b,c,d,e|b-a==c-b&&b-a==d-c&&e-d==b-a} 以下、実行結果です。 [[5, 11, 17, 23, 29], [5, 17, 29, 41, 53], [5, 47, 89, 131, 173], [5, 53, 101, 149, 197], [7, 37, 67, 97, 127], [11, 41, 71, 101, 131], [37, 67, 97, 127, 157]] |
12月16日(木) 15:50:00
51127 |
紫の薔薇の人 |
#51125
1から少なくとも200辺りまで、或いはもっと先まで、素数は2と3を除き、6の倍数の両隣り以外には存在しない。 これは受験算数の常識。理由は知らない。 6の倍数の両隣は、6n+1 または、6n+5 それ以外は、 6n・・・・6の倍数 6n+2=2(3n+1)・・・2の倍数 6n+3=3(2n+1)・・・3の倍数 6n+4=2(3n+2)・・・2の倍数 となり、素数になりえません。 |
12月16日(木) 20:32:15
51128 |
ドリトル |
リアルタイムはまた出来ず。
とりあえず公差は偶数だからまあなんとかなる。 それぞれの項を3で割った余りは公差が3の倍数でない限りどこかで0になってしまう。 同じことを5でもやって、公差は30の倍数だと見た。 7の倍数が時々くることを考えて、初項7、公差30にしたら、 7、37、67、97、127。あれいけた。127未満の最大の素数は113で、公差30だとマイナスになってしまうのでこれ以下はダメ、127が最小。 とまあこんな感じでやりました。まだまだたくさん解法がありそうです。 |
12月16日(木) 21:47:08
51129 |
Shin Koba |
紫の、、、さん。
どもども、ありがとうございます。 細かいことを気にせずに来てしまったので、未だ無知識無教養、お恥ずかしい限りです笑 |
12月17日(金) 3:11:05
51130 |
ベルク・カッツェ |
6の倍数の条件は外せない。
5の倍数の条件は5から始めればなくてもいける。 まず5から始まる数列を調べて、その後は5番目の数が小さいほうから見つかるまでひたすら調べていく。 他にいい方法が思いつかないのですが、もし答えが大きな数だった場合ものすごく時間がかかりますよね。 虱潰しに調べさせる問題なのだからそこまで大きな数ではないはず、との予想のもどに調べていくしかないのでしょうか。 |
12月17日(金) 12:15:46
51131 |
紫の薔薇の人 |
#51130
Shin Kobaさんが紹介してくれた、受験算数の常識は、算数卒業してからも使えそうで、「ロックな苺パンツ」に比べたらいい方かと。 ここで最上位に来る人は、数学に頼らず、最短ルートで算数で解いちゃう猛者が殆どだから、受験算数常識を身につけたら少しは対抗できるかなと、古本で「ロックな苺パンツ」が載っている本を買った私でした。 |
12月17日(金) 21:05:55
51132 |
ドリトル |
#51131ベルクカッツェさん
おっと、そのことを書くのを忘れていました。 その場合は公差が7で割って0or5or6になるので、5番目の数が3桁になるような最小の公差は42で5、47、89、131、173で条件を満たします。 ここまで来たらうっかり173と答えてしまいそうですね。 僕は山勘で初項7の方が小さくなる気がする!と思ってそれが当たり、それ以下がないことも分かって安心、という流れでした。 なるべく勘では解かないようにしていますが、今回はつい簡単な方に逃げてしまいました… |
12月17日(金) 22:36:26
51133 |
June |
いい問題ですね |
12月18日(土) 0:29:17
51134 |
「数学」小旅行 |
#51132 紫の薔薇の人さま
「ロックな苺パンツ」のことさえも知らない私です。 |
12月18日(土) 10:19:39
51135 |
ばち丸 |
まずは公差について考えてみる。5つの数があって、等差数列でみな素数なので
公差は2、3、5の倍数であるとわかる。そうでないとどこかで2,3,5の倍数が出てくる。 となると公差は30であろう。初項を愚直に2,3,5,7・・・と上げていくと7の時が答えであった。 |
12月18日(土) 12:25:42
51136 |
まるケン |
オンライン整数列大辞典 A204189 に26項からなる素数等差数列が載っていました!
現在見つかっているのは27項からなるものだそうですが、どんな項数でも存在する!って、誰かが証明しちゃったらしいですね。 |
12月18日(土) 14:52:32
MAIL:take4310@mobile.email.ne.jp 51137 |
syokyuhsya |
パイソンでプログラムを作ってみました。プログラムは
added1=[] added2=[] for number1 in range(2,1000): count=0 for number2 in range(1,number1): if number==0: count+=1 if count==1: added1.append(number1) print(added1) x=[a,b,c,d,e] for a in added1: for b in added1: for c in added1: for d in added1: for e in added1: if a<b<c<d<e and b-a==c-b==d-c==e-d and e>100: added2.append(e) print(added2) min_saisyouti=min(added2) print("最小値=",min_saisyouti) このプログラムを実行すると、結果を得るのに6時間位かかります。 |
12月24日(金) 9:50:41
MAIL:syokyuhsya@gmail.com 51138 |
あまちゅあごるふぁーまさる |
10年振りくらいに除いてみました。
TAROさん、まだ活躍されているのですね! |
12月26日(日) 14:41:24
51139 |
いちごみるく |
プログラムでやるならこんなです
#include <bits/stdc++.h> using namespace std; const int INF = 1e9; #define rep(i, n) for (int i = 0; i < (n); ++i) #define rep2(i,l,r)for(int i=(l);i<(r);++i) #define endl "\n" vector<bool> sieve(int n = 1000) { vector<bool>p(n + 1, true); vector<int>ret; p[0] = false; p[1] = false; for (int i = 2; i <= n; ++i) { if (!p[i]) continue; ret.push_back(i); for (int j = 2 * i; j <= n; j += i) p[j] = false; } return p; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); auto plist = sieve(); vector<int>ans(5, INF); rep(i, plist.size()) { if (!plist[i])continue; rep2(j, i + 1, plist.size()) { if (!plist[j])continue; auto slove = [&](int first, int difference)->void { rep(i, 5) { int x = first + difference * i; if (ans.back() < x)return; if (x > 1000) return; if (!plist[x]) return; if ((4 == i) && (x < 100)) return; } rep(i,5) ans[i] = first + difference * i; return; }; slove(i, j - i); } } rep(i, 5) cout << ans[i] << " "; return 0; } |
12月26日(日) 17:27:09
51140 |