スポンサーサイト

一定期間更新がないため広告を表示しています

スポンサードリンク | - | | - | - |

数学定数の分数表現探してみた

355/113的なやつ探してみた。

https://jajagacchi.github.io/pi2/pi.html

ジャジャガッチ | 数学 | 23:39 | comments(0) | trackbacks(0) |

三角関数の値を素朴に計算してみた

三角関数表ってどうやって作ってんだろうっていう疑問から素朴に三角関数の値計算してみた。

 

https://jajagacchi.github.io/tri/tri.html

ジャジャガッチ | 数学 | 23:05 | comments(0) | trackbacks(0) |

モンテカルロ法で円周率を計算してみる

誤差解析してみた。

https://jajagacchi.github.io/pi/pi.html

ジャジャガッチ | 数学 | 22:49 | comments(0) | trackbacks(0) |

円周率は3.14か

ゆとり教育批判真っ只中の頃は円周率が3なんて!という批判がよく聞かれた。結局これはデマだったようだが。

円周率3が批判される理由のひとつとして、円周率が3だとその円に内接する正六角形と周長が等しくなってしまう、というものがある。

でもこれは3.14でも同じ話だ。円周率が3.14の場合は正57角形が3.1400*で少し円より周長が長くなる。

批判するならこういうことを踏まえた上で批判しましょう。

 

ゆとり教育の円周率3は、場合によっては3で代替するというくらいの話だったようだ。

これは賛成だ。概算という考え方は非常に重要だ。

買い物するときにこれは108円でこれは216円でみたいな足し算中々しないでしょう。

大体これが100円でこれが200円で大体いくらかな、という考え方をするでしょう。

例えば、次のような問題を考える。

 

問. A君は半径2の円の面積が30よりも大きいと言っています。真偽を答えよ。

 

愚直に3.14×2×2を筆算しちゃう子も出てくるんじゃないかと思うんだけど、これは円周率を3ないし安全策で4ととれば瞬時に判断できる。

こういう判断が出来るのは実生活でも科学でも重要じゃないでしょうか。

 

あと関係にないけど曲がった空間では円周率は3.1415…じゃないよ。みんなボールに円を描いて円周率考えてみよう!この場合、円周率は描く円の半径に依存する。面白いね。

 

ジャジャガッチ | 数学 | 21:49 | comments(0) | trackbacks(0) |

TOEIC 700点超えたわ

うん、2月に受けたTOEIC 735 (L:400/R:335)だった。

今年の目標が700突破だったのでもう目標達成してもうたわ。ハードル低すぎた???

以前の結果で手元にあるのは2015/08に受けた530(L:245/R:285)だけだけど、ちょっと経過をメモがてら記録しとく。

 

2015/10から英会話が必要になるのが確定していたため、事前に受けたのが2015/08で530。学生時代に受けたのも入社直後に受けたのも550くらいだったのでまあそれくらいの英語力で上がらず下がらずで数年やって来たって感じ。

2015/10から死にそうになりながら英会話して2016/02に受けた結果が650くらい。リスニングが100点上がってた記憶あり。2016/04くらいから精神的に余裕がなくなって英語の勉強はストップしていたが、2016/08の結果はほぼ変わらずやはり650くらい。英語力が維持できていたとほっとした。2016/10からほぼ英会話の機会はなくなったが、2016/11から勉強を再開して2017/02で735。

結構いいペース?

 

ちなみにTOEIC向けの試験対策は一切していない。問題集も全くやってない。これからもする気はない。

今は単語力増強の為ひたすらDUOをやり続けている。

DUOをやりこんだら文法の基礎を押さえようかなと思っている。

スピーキングの練習もしとかないとなあ。

 

英語嫌いでも必要に迫られれば少しずつ出来るようになるんだねえ。

ジャジャガッチ | その他 | 22:59 | comments(0) | trackbacks(0) |

ABC053 4AC!

競技プログラミングコンテスト3回目。初めて全問解けた!

今回はごりごり実装というよりはじっくり考えることによって非常にシンプルなコードに落とし込めるという感じだった。

それほど新しく得たものはないけど、std::stringの扱い(検索とか)はチェックしといた方がいいなと思った。

 

問題Dをどう解いたか書いとく。

問題文

すぬけくんはカードゲームで遊ぶことにしました。 N 枚からなるカードの山があり、上から i 枚目のカードには整数 Ai が書かれています。

すぬけくんはこのカードの山に対し 0 回以上、以下の操作を行い、残ったカードに書かれた値が互いに異なるようにしたいです。最大で何枚のカードを残すことが可能か求めなさい。なお、N は奇数であり、少なくとも 1 枚のカードを残すことが可能であることが保証されます。

操作:カードの山から任意の 3 枚のカードを抜き出す。抜き出したカードのうち書かれた値が最大であるようなカード 1 枚と最小であるようなカード 1 枚の合計 2 枚を選んで食べる。その後残った 1 枚をカードの山に戻す。

制約

  • 3≦N≦105
  • N は奇数
  • 1≦Ai≦105
  • Ai は整数

最初にソートして数iの枚数niを算出する。

niが3以上の奇数ならそのカードのみ3枚選べば2枚消せる。-2, -2…を繰り返していけるので最終的に1枚に出来る。つまりniが奇数のものは1枚に出来る。

niが偶数のものも-2, -2を繰り返して2枚まで減らせる。2枚にしたら、その2枚と他の数のカード1枚を消して1枚消せる。つまりniが偶数のものが2つあれば両方を奇数に出来るので偶数ペアも1枚に出来る。

最後に偶数枚のカードがペアにならずに残っていたら1枚になっているカードを犠牲にして消さざるを得ない。

まあこういう感じの考え方。

 

ひとつ収穫があった。

数列中に含まれる各数の個数をカウントするときに数列をソートしてやったんだけど、他の人のコードをみたら

count[10001]={0}を用意して数列を走査しながらcount[n]++を繰り返してた。

なるほど、数列に現れる数の上限が小さければこういうことが出来るのか。

業務ではあんまりこういうことはしないよなー。

ジャジャガッチ | C/C++ | 23:21 | comments(0) | trackbacks(0) |

sphinxいいよ

アルゴリズムについてまとめるためsphinxを使ってwebサイトを作ったわけだが、sphinxいいよ。

書くのにそれほど覚えることはないし、数式もシンタックスハイライトもいける。

cuiで完結するのもいい。軽い。

ソースコードもドキュメント中にコピペしたわけではなく、別ディレクトリにあるcppファイル名を指定して表示している。

このおかげでcppソースを変更してもmake htmlしなおせばhtmlの方も変更が同期される。

図の挿入が面倒くさそうなので、図がいっぱいの文書には不向きかもしれないが、テキストメインの技術文書には使いやすいんじゃないかな。

ジャジャガッチ | Linux | 23:42 | comments(0) | trackbacks(0) |

アルゴリズムをまとめたwebサイトを作りたい

競技プログラミングでよく使うアルゴリズムをまとめたwebサイトを作りたい。

問題を解く時や、仕事で必要なときに適宜このブログを参照しているが、自分の知りたい情報を得るのに時間がかかる。

そこでもう少しちゃんとした技術文書として新しくwebサイトを作りたい。

シンタックスハイライトもちゃんとしてくれてlatexによる数式表示もサポートしてるようなものないかなー、と探してみたら、あった!

その名もSphinx。

 

とりあえずインストールする。

pipというツールでインストールするのが楽だ。新しめpythonには同梱されているらしいのでまずは最新のpythonをインストールする。

あ、ちなみに環境はCentOS7ね。

 

python3.6.0落としてきて、

./configure -> make -> make install

でpythonをインストール。

 

sphinxは

pip3.6 install sphinx

でok。

 

数式のため

yum install *tex*

でtex関連片っ端からインストール。

 

文書作成のためにはまず

sphinx-quichstartを実行して適当に質問に答えていけば雛形が作られる。

数式表示のためにはconf.pyで

extensions += ['sphinx.ext.mathjax']

と記述すればOK。

 

公開する手段は色々あるが、今回はお手軽そうなGitHubを利用した方法を採用する。

手順は次の通り。

まずhithubにユーザ名.github.ioというレポジトリを作成する。

次にlocalで生成したhtml群をgit addする。(htmlのあるところでgit add . でok)

.nojekyllという空ファイルを作成し、git add する。

git remote add origin ***.git

でリモートリポジトリにoriginという名前をつけて

git push origin master

でリモートにpushする。

これでhttp://ユーザ名.github.ioに公開される。

ほい===> https://jajagacchi.github.io/index.html

 

ジャジャガッチ | Linux | 22:27 | comments(0) | trackbacks(0) |

ABC052-C Factors of Factorial

ABC052も参加出来ました!

前回と同じくA, B, Cは出来たけどDは出来なかった。

これが今の実力か。

Cは勉強した剰余計算が大いに役に立った!

問題文

整数 N が与えられます。 N! の正の約数の個数を 109+7 で割った余りを求めてください。

 

次のようにすればOK。

例えば6!なら素因数分解すると2が4個、3が2個、5が1個出て来る。これらを使うか使わないかの組み合わせで5×3×2通りの約数がある。

さて、問題は素因数分解したことがないということだ。

ぐぐってみると、効率は悪いが試し割りという方法がシンプルでよさげ。Nも最大1000とさして大きくないし。

#include <iostream>
#include <vector>
const int MOD = 1000000007;

void countPN(int n, std::vector<int> &count)//nを素因数に分解し、countを更新
{
	int m = n;
	for(int i=2 ; i*i<=n ; ++i)
	{
		while(m%i == 0)
		{
			m /= i;
			count[i]++;
		}
		if(m==1) break;
	}
	if(m!=1) count[m]++;

}

int main()
{
	int N; std::cin >> N;
	std::vector<int> count(1024);
	for(auto &x : count) x = 0;
	for(int n=2; n<=N; n++) countPN(n, count);

	long long ans = 1;
	for(int n=2; n<=N; n++)
	{
		if(count[n] != 0)
		{
			ans *= count[n]+1;
			ans %= MOD;
		}
	}
	std::cout << ans << std::endl;
	return 0;
}

ほれ、剰余計算もばっちしじゃ!

素因数分解とか約数の列挙とか素数の列挙とか抑えとかないかんかな。

ジャジャガッチ | C/C++ | 23:23 | comments(0) | trackbacks(0) |

ABC046-C AtCoDeerくんと選挙速報

それほど難しくはないんだけど細かいところで詰まった。

それは切り上げ処理。

ceil((double)a/b);
a/b + (a%b==0 ? 0 : 1);

最初は前者でサブミットしたんだけど、一部でWAとなる。

誤差が生じないように後者の方法を使えばok。

ジャジャガッチ | C/C++ | 23:11 | comments(0) | trackbacks(0) |
1/55PAGES | >> |

05
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--
>>
<<
--
PR
RECOMMEND
RECENT COMMENT
MOBILE
qrcode
OTHERS
Since 2013/09/17
LATEST ENTRY
CATEGORY
ARCHIVE
LINKS
PROFILE
SEARCH