数論ってスゲー!

chop.chop
記事: 36
登録日時: 10年前

数論ってスゲー!

投稿記事 by chop.chop » 10年前

どうも、chop.chopです。

最近は院試が終わったのもあって毎日が(コーディングやらアルゴリズムの勉強やら論文読むのやらで)充実している日々を遅れています。
あ、院試は無事合格していました。来年からは東工大の情報理工学院所属です。

実は4月に始めた院試の勉強の最中もずっとやりたいと思っていたことがあります。
数論です。

この分野は本来工学とは全くと言っていいほど関係が無いpure math、つまり純粋な数学の研究分野でした。
現在使っている本も、数論とは芸術としての数学だと言っています。使ってるのはコレhttp://u222u.info/o0pM

しかしこの数論は、実は情報系のとある分野の方々から熱烈に興味を持たれている分野でも在ります。
そう、暗号です。RSA暗号とか、楕円曲線暗号とか。
ざっくばらんに言うと、RSAも楕円曲線も同じ、余りの世界でのある計算の難しさ、を根拠にして暗号を構成しています。

正直な所、エンジニアとしては、数論によって何故その計算が難しいのかを理解しなくても、その操作が難しいとだけ認めればそれを道具として様々な暗号/認証を組み立てることが出来るのですが、どうも知らないままだと無性に気持ち悪くてそれを教授に相談した所、じゃあ本買って勉強会しよう、という話になりました。

そして本日がその一回目で、自分が担当した内容だったのですが、その成果にちょっとプログラマ(もどき)としては悔しいというか、フンヌー!という感情に襲われたので日記に記しておきたいと思います。

本日の内容は、三角数と平方数が等しい場合、それを見つけよ、というものでした。
実はこれ、以前http://dixq.net/forum/viewtopic.php?f=3&t=17029で、みけCATさんに手伝ってもらったコードがあるのですが、それをちょっとだけ改良したものがこれ。

CODE:

#include
#include

namespace mp=boost::multiprecision;

int bisearch(mp::cpp_int *b,mp::cpp_int tar,unsigned long long int s,unsigned long long int e)
{
	unsigned long long int m;
/*
std::cout>n;
	mp::cpp_int *b=new mp::cpp_int[n+1];
	int temp;

	for(i=1;i
#include

namespace mp=boost::multiprecision;

mp::cpp_int bisearch(mp::cpp_int tar,mp::cpp_int s,mp::cpp_int e)
{
	mp::cpp_int mid;
	mp::cpp_int tempmid;

/*
std::cout>tri;
	std::cout>squ;
	std::cout((tri+1)*(tri)/2))
	{
		tri=2*tri;
	}

	mp::cpp_int temp=1;

	for(i=1;i
#include

namespace mp=boost::multiprecision;

int main()
{
	int n;
	std::cin>>n;

	int i=1;

	mp::cpp_int x1,y1,xk,yk,xkk,ykk,nk,mk;
	x1=xk=3;
	y1=yk=2;


	nk=(xk-1)/2;
	mk=(yk)/2;

	std::cout<<mk<<","<<nk<<","<<mk*mk<<std::endl;

	while(1)
	{
		xkk=xk*x1+yk*y1*2;
		ykk=xk*y1+x1*yk;

		nk=(xkk-1)/2;
		mk=(ykk)/2;

		std::cout<<mk<<","<<nk<<","<<mk*mk<<std::endl;

		xk=xkk;
		yk=ykk;

		if(i==n)
		{
			break;
		}
		i++;
	}
}

環境がある方はどうぞ実行してみて下さい。入力はnこだけ出力しろ、という仕様になっています。
一見してわかるように、このプログラムは探索を行っているわけではありません。
数学的事実に基づいて、単に数の計算を行っているのです。

必死で考えたプログラムが数学者の発見によってこうも簡単に覆されるのは正直シャクに触りました。

もちろん、両者の出力が同じものとはいえ、内部でやっていることは全く違います。かたや探索でかたや生成だけです。比較するほうが間違っているとも言えます。




皆さんはどう思われるでしょうか?

アバター
GRAM
記事: 164
登録日時: 14年前

Re: 数論ってスゲー!

投稿記事 by GRAM » 10年前

平方三角数なんて複雑(?)な例を用いなくても数列くらいでいいと思います.
要はたとえばk^n の和について公式使うか律儀に足すかって話ですよね.

どう...というわけじゃないですが,解析的に求まるのならば実用上はそれに越したことはないんじゃないですか?
世の中の計算機を使うほとんどの問題は解析的に求まらないから計算機を使うわけですし.

chop.chop
記事: 36
登録日時: 10年前

RE: 数論ってスゲー!

投稿記事 by chop.chop » 9年前

GRAM さんが書きました:世の中の計算機を使うほとんどの問題は解析的に求まらないから計算機を使うわけですし.
確かに、言われてみればそうですね……

とっち
記事: 56
登録日時: 13年前

Re: 数論ってスゲー!

投稿記事 by とっち » 9年前

はじめまして、chop.chopさん
とっちって言います

数論って面白いですよね
私も楕円曲線暗号をやってる院生なのですが、たまに理論の美しさに感動したりしますw

chop.chopさんが興味あるかわかりませんが楕円曲線暗号やその応用のペアリング暗号の話のページを紹介しますね
もし興味を持っていただけたら幸いです
http://blog.cybozu.io/entry/8567

chop.chop
記事: 36
登録日時: 10年前

RE: 数論ってスゲー!

投稿記事 by chop.chop » 9年前

>>とっち さん

始めまして。

その教本概要がおおよそ載っていていいですよね!
私は学部生で、院からは別の専攻に移るので研究として暗号をいじるのは学部までですが、数論や暗号の勉強は興味の対象として継続していきたいですね。