[ ホームページ ] [ 携帯用URL ]
DS 数学 BBS
大学以上の内容は DS 数学 BBS・2(携帯電話用)へ。
数学以外の話題は赤猫雑談掲示板で。
注意事項, 記号の書き方例をお読みになった上でご利用ください。

[ EZBBS.NET | 新規作成 | ランキング | サポート ]
名前 一覧
 E-mail 
題名
内容

投稿KEY    タグ有効 改行有効 等幅フォント
URL
添付

 
掲示板のTOP | 過去ログ集 | 投稿練習 | よく質問される問題 | エッセイblog



57712.Re: ある数列をどういう式で簡潔に表わせばいいか  
名前:らすかる    日付:2017年10月31日(火) 18時6分
はい、問題ありません。
私は
((((((((ax+b)x+c)x+d)x+e)x+f)x+g)x+h)x+i)x+j
のように計算しましたが、+e)xまで計算したところで
一旦modをとるようにしました。

pl46740.ag0506.nttpc.ne.jp (219.102.178.148)
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0

57710.Re: ある数列をどういう式で簡潔に表わせばいいか  
名前:CEGIPO    日付:2017年10月31日(火) 17時53分
そうですか。力業(ちからわざ)だったんですね。
ちなみに、、

たとえば10*q0^9のmod.11による剰余を見つけるのに
9乗をそのまま計算していてはオーバーフロー
になってしまう可能性があるので

constx:=11

q00 := q0 % constx
余り:=amari(q00,9,constx)

amari(q00,dim,constx){
 rem := 1;
 for(i := 1; i <= dim; i++) {
  rem *= q00;
  rem %= constx;
 }
 return rem;
}

といった風に計算の桁数を抑えて追検証したのですが
特に問題ないですよね?
(社会人/質問者)

M014008106064.v4.enabler.ne.jp (14.8.106.64)
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36

57709.Re: ある数列をどういう式で簡潔に表わせばいいか  
名前:らすかる    日付:2017年10月31日(火) 17時41分
q0^0,q0^1,q0^2,…,q0^9の多項式で何とかなるだろうと思って
プログラムで全探索して見つけました。
10乗以上は無意味なので見つかるならば最大9乗、そして
係数は0〜10まで調べればよいので全部で11^10=25937424601通りで、
全探索不可能な量ではないですね。
(少し工夫すればかなり速くできますが、特に工夫しませんでした)

pl46740.ag0506.nttpc.ne.jp (219.102.178.148)
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0

57708.Re: ある数列をどういう式で簡潔に表わせばいいか  
名前:CEGIPO    日付:2017年10月31日(火) 17時28分
らすかるさん、ありがとうございます。

プログラムで確かめてみました。
確かにそうなってますね。
g(q0)は非常にすっきりした表現ですね。

※ところでそれはそうと(f(q0)も)q0^9まで動員するんですね。
試行錯誤で見つけようと思いましたが僕の数学力では無理です。

q0^9まで動員するって一体どうやって導いたんですか?
なにかそういう解法のコツがあるんですか?
(社会人/質問者)

M014008106064.v4.enabler.ne.jp (14.8.106.64)
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36

57707.Re: ある数列をどういう式で簡潔に表わせばいいか  
名前:らすかる    日付:2017年10月31日(火) 17時26分
とりあえず、g(q0)は
g(q0)=(9*q0^9)%11
と綺麗に表せます。
f(q0)の方は
f(q0)=(10*q0^9+5*q0^8+8*q0^6+6*q0^4+4*q0^2+5*q0+3)%11
 =10(q0+1)(q0+2)^2(q0^6+q0^5+9*q0^4+q0^3+7*q0^2+3*q0+2)%11
とは表せますが、この式に意味があるかどうかはわかりません。
このf(q0)を使うと
g(q0)-f(q0)=(10*q0^9+6*q0^8+3*q0^6+5*q0^4+7*q0^2+6*q0+8)%11
 =10(q0^2+8*q0+8)(q0^7+8*q0^6+5*q0^5+3*q0^4+2*q0^3+10*q0^2+3*q0+10)%11
h(q0)-f(q0)=(q0^9+6*q0^8+3*q0^6+5*q0^4+7*q0^2+5*q0+8)%11
 =(q0^2+3*q0+8)(q0^7+3*q0^6+5*q0^5+8*q0^4+2*q0^3+q0^2+3*q0+1)%11
となります。

pl46740.ag0506.nttpc.ne.jp (219.102.178.148)
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0

57701.ある数列をどういう式で簡潔に表わせばいいか  
名前:CEGIPO    日付:2017年10月31日(火) 14時55分
(自作問題:質問1と質問2の2つです)

(一部改:等号と代入を混同しやすいと思われるので
代入式をa:=b に変更しました)

※aとbの積をab,a・b,a*b等で適宜表わすものとしておきます。
※a % bはC,Java等のプログラム用の表記ですが
aをbで割った余りと言う意味です。
※a == bは同様にaとbが等しい時に真の値をとる論理式です。
※c && dは同様にc,dを論理式としてcが真かつdが真の時にのみ
真となる論理式です。
※//A,//B,//C,//Dは括弧を対応させるための目印です。

以下、mod.11がベースになることを前提にします。
このような数列↓があります(縦書きします)。
ある考察(下記※1)の過程で現れたものです。
これらの数列は全て相互に関連があると思われます。

q0,h(q0)=11-q0,f(q0),g(q0),g(q0)-f(q0),h(q0)-f(q0)
1......10.......8.......9.......1...........2
2.......9.......8......10.......2...........1
3.......8.......2.......3.......1...........6
4.......7.......3.......5.......2...........4
5.......6.......2.......4.......2...........4
6.......5.......3.......7.......4...........2
7.......4.......2.......6.......4...........2
8.......3.......2.......8.......6...........1
9.......2.......0.......1.......1...........2
10......1.......0.......2.......2...........1

(ヒントと思われる小発見)
g(q0)- f(q0)とh(q0)- f(q0)を比較してみると
並びがちょうど反転しているのがわかります。

このとき、自明でないのはf(q0)とg(q0)ですが

(質問1)f(q0)(という数列が考察(下記※1)の過程で出てきたのですが)
このf(q0)をq0の何らかの式(ロジックでも良い)
でなんとか表せないでしょうか?

(g(q0)については求めるロジックが一応わかっています。)

/* g(q0)を求めるロジック(抜粋) */

const2として11を渡す

func1(q0,const2) {//D
ループ(i := 1; i <= 100(※適当な大きさ)の間; i++) {//C
w1 := const2 * i - 2
if(q0 が 0の時) {
g(q0):=0
ループを抜ける(g(q0)を返す)
}
else if(w1 を q0で割った余りが 0の時) {
g(q0):= w1 / q0
ループを抜ける(g(q0)を返す)
}
}//C
}//D

(考察※1:抜粋)

const2 := 11

外ループ(
※自然数k1,k2,k3,k4が
k3k4:=k1k2+2,
6k3k4-k3k4:=6k1k2-k1-k2+1
を共に満たす場合を考える){//A

中ループ(自然数qを1から適当な大きさまで) {//B

q0 := q % const2 (※qをconst2で割った余り)
qx := (q - q0) / const2 + 1

y1 := 0
y2 := 0

if(q0 が0以外の時) {
y1 := func1(q0,const2)
y2 := y1-const2
}

//9,10,3,5,4,7,6,8,1,2
y3[1] := -8
y3[2] := -8
y3[3] := -2
y3[4] := -3
y3[5] := -2
y3[6] := -3
y3[7] := -2
y3[8] := -2
y3[9] := -0
y3[10] := -0

y30 := y3[q0]
y40 := y3[const2-q0]

x1 := q
x2 := y1 * qx + y30
x3 := x1 + const2
x4 := y2 * qx + y40
a := (k1 - x2) / x1

if(k1 == x1 * a + x2 && k2 == x3 * a + x4 && k3 == x1 * (a - 1) + x2
&& k4 == x3 * (a + 1) + x4 の時) {
(q0≡0(mod.11)でない時、
上式の一連のコーディングによりここが必ず成り立つらしい。)
}

}//B

}//A


(質問2)g(q0)は求めるロジックがわかっていますが
これをさらに(q0の)簡単な式で表せないでしょうか?

以上よろしくお願いします。
(社会人/質問者)

M014008106064.v4.enabler.ne.jp (14.8.106.64)
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36


「57701.ある数列をどういう式で簡潔に表わせばいいか」への返信


公序良俗に反する投稿は無予告削除対象です。

   投稿KEY
   パスワード

EZBBS.NET produced by InsideWeb