CHAM https://cham.space 港区エンジニアの秘密基地 Mon, 17 Apr 2023 06:16:14 +0000 ja hourly 1 https://cham.space/wp-content/uploads/2024/01/cropped-cham_space_favicon_v2-32x32.png CHAM https://cham.space 32 32 電子書籍 EC の決定版!技術書・ビジネス本を PDF でお得に購入できるオススメの出版社 https://cham.space/pdfbooks/ Fri, 28 Oct 2022 00:22:00 +0000 https://cham.space/?p=9993

プログラミングやビジネスの専門書を PDF でも購入できるオススメの出版社をまとめます。 書籍数が豊富で、「ポイント還元」や「割引キャンペーン」も頻繁に行われている EC を厳選しました。 ePUB や AZW などの電 ... ]]>

プログラミングやビジネスの専門書を PDF でも購入できるオススメの出版社をまとめます。

書籍数が豊富で、「ポイント還元」や「割引キャンペーン」も頻繁に行われている EC を厳選しました。

ePUB や AZW などの電子書籍とは異なり、PDF は下記 5 点が特に優れています。

  • 専用アプリ不要
  • ローカル保存のため通信費用はほぼゼロ
  • あらゆる端末で閲覧可能
  • 端末間でのファイル移動が容易
  • コピペが可能

もちろん、紙媒体や Kindle も利用しています。

しかし、プログラミング時にコードを参考にする場合や、資料作成時に文言を引用する場合は、PDF が重宝します。

また、起動と動作が重い専用ツールを使うことなく、サクッと閲覧できるため、ストレスもありません。

学生やエンジニアをはじめ、屋外でも通信容量を気にせず、スキマ時間を利用して勉強したい方におすすめです。

インプレスブックス

おすすめ度

初心者向けに、プログラミングの基礎を丁寧に解説する「一週間シリーズ」「スッキリわかる」シリーズが有名です。

第一線で活躍する著者陣による、セミナー形式の「いちばんやさしい教本」も出版しています。

資格試験を分かりやすく解説する「かんたん合格」シリーズもあります。

技術評論社

おすすめ度

プログラミング言語の解説書である「パーフェクト」シリーズが有名です。

「ポケットリファレンス」も出版しています。

個人的には「Software Design」「WEB + DB PRESS」の定期購読シリーズが重宝です。

オライリー

おすすめ度

豊富な情報量と徹底解説に優れた出版社です。

ハンズオン形式のチュートリアルにより、知識とコーディングを学ぶことができます。

翻訳書が多く、少々読み辛い場合もありますが、実用的かつ省略されがちな細かなテクニックがまとめられています。

差別化を図るためのコアな知識とスキルを学びたい方におすすめです。

翔泳社

おすすめ度

最もオススメする出版社です。

エンジニアに必要な専門書をオールマイティに扱っており、毎年「IT エンジニア本大賞」も発表しています。

最大 50% のポイント還元キャンペーンが定期的に行われています。

超お得に購入できますので、適宜チェックすることをオススメします。

SEshop でしか購入できない「PDF 版電子書籍」も沢山あります。

Manatee

おすすめ度

IT 特化の電子書籍サイトです。

店頭や Amazon などで見かけないマニアックな書籍が豊富です。

書籍ページに簡単なレビューが付いており、学べることや読者レベルを把握できるため、安心して購入できます。

最大 50% OFF のセールも頻繁に行われており、超お得に購入できます。

]]>
独学で始める副業ブログ!初心者に役立つ必読書 https://cham.space/blogbooks/ Wed, 26 Oct 2022 10:00:00 +0000 https://cham.space/?p=9794

副業ブログを始めたい方が、初めに読むべき必読書をピックアップしました。 cham は、数年前の大学時代から独学でブログを始め、複数サイトを運営しています。 当サイトも最近立ち上げました。 サイト運営は完全に独学であり、H ... ]]>

副業ブログを始めたい方が、初めに読むべき必読書をピックアップしました。

cham は、数年前の大学時代から独学でブログを始め、複数サイトを運営しています。

当サイトも最近立ち上げました。

サイト運営は完全に独学であり、HTML / CSS / PHP / WordPress の技術書をはじめ、ライティング、マーケティング、ブログノウハウ、デザインに関する書籍を読み漁っています。

その経験値から「まずはこれさえ読んでおけば良い」という参考書をまとめました。

全て読む必要はありません。

興味のある本をチェックしてみてはいかがでしょうか?

「ゆる副業」のはじめかた

おすすめ度

超人気ブロガーによる、副業ブログの完全初心者向けガイドです。

特別な才能や環境なしに、月数万レベルのブログ収益を、最短で達成するためのノウハウがまとめられています。

元会社員のヒトデさんが、趣味からスタートし、ブログで独立するまでに培った数々のテクニックや着眼点を学ぶことができます。

無駄な労力なく、マイペースに副業を始めたい方におすすめです。

ブログで5億円稼いだ方法

おすすめ度

アフィリエイトブログの入門書です。

高校卒業から 18 年間ブログを続けトータル 5 億円を稼いだ著者が、収益に直結する 73 のノウハウをまとめています。

ブログ戦略をはじめ、文章術や SEO の基本など、収益を爆増させるための具体的な方法が体系的に説明されており、何をすべきかが明確に分かります。

最短でブログを収益化するための攻略本が欲しい方におすすめです。

マクサン式 Web ライティング実践スキル大全

おすすめ度

アフィリエイトブログのプロによる Web ライティングの実践スキル集です。

文章を書いて月十数万の安定した収入を得るための、再現性の高い必須テクニックを身に付けることができます。

記事構成、見出しの最適化、文章の書き方など、マネするだけでアクセス数を爆増させる神スキルが豊富にまとめられています。

ライターを目指す方をはじめ、ブログで記事をスラスラ書きたい方におすすめです。

沈黙の Web ライティング

おすすめ度

Web ライティングの入門書です。

検索集客のプロが、検索エンジンに評価される記事の書き方や、バズに繋がるコンテンツ作成のコツをまとめています。

経営危機にある温泉旅館を舞台にした漫画のストーリーと、詳細を掘り下げた解説パートにより、実戦的で生々しいノウハウを学ぶことができます。

漫画を楽しみながら、SEO と Web ライティングの基礎をサクッと学習したい方におすすめです。

沈黙の Web マーケティング

おすすめ度

Web マーケティングの入門書です。

Web 集客のプロが、EC サイトや Web サービスを通して、商品の価値を正しく伝えるための導線作りをまとめています。

売上に伸び悩む家具屋を舞台にした漫画から、店舗サイトを改善しながら集客を劇的に伸ばすための具体的な方法を学ぶことができます。

ストーリーの状況を自身のサイトに置き換えて読み進められ、自分事として没頭してしまいます。

漫画を楽しみながら、Web マーケティングの基礎をサクッと学習したい方におすすめです。

ポチらせる文章術

おすすめ度

カリスマコピーライターによる文章術の本です。

媒体や商品を問わず「見てもらう」「共感してもらう」「買ってもらう」コピーを考えるためのノウハウがまとめられています。

販売サイト、ネット広告、メルマガ、ブログ、ホームページ、SNS など、あらゆる Web 媒体で効果バツグンです。

ブログや SNS で「気になる」「読んでみたい」と思わせるメッセージを発信する力を身に付けたい方におすすめです。

1 冊ですべて身につく WordPress 入門講座

おすすめ度

WordPress の入門書です。

サイト制作の基礎知識をはじめ、WordPress の基本機能や操作方法、運用知識などの応用まで体系的にまとめられています。

副業ブログを始める場合、基本的には WordPress を利用します。

本書を参考にすることで、迷うことなくサイト構築ができ、セキュリティ周りも含めた適切な管理を行うことができます。

中級者の場合でも、フルサイト編集やオリジナルテーマ作成など、一歩先のスキルを学ぶことができます。

WordPress の初学者から中級者、改めて学習したい方におすすめです。

HTML / CSS & Webデザイン 1 冊目の本

おすすめ度

HTML / CSS と Web デザインの入門書です。

初学者にとって必要十分な知識が簡潔にまとめられています。

WordPress を用いてノーコードでサイト制作をする場合も、HTML / CSS の基礎を理解していれば、思い通りのカスタマイズが可能です。

CSS デザインのコピペサイトのソースコードを解読し、応用できるようになり、独自表現でサイトの差別化が図れます。

カスタマイズを自由自在に行ううえでの必要知識を、短い時間で無駄なく学習したい方におすすめです。

WordPress ユーザーのための PHP 入門

おすすめ度

WordPress に特化した PHP の入門書です。

PHP の基本文法をはじめ、WordPress の仕組みに合わせた特有の実装方法が網羅されています。

WordPress のベースは PHP であり、デザインに留まらないバックエンドのカスタマイズを試みる場合、 PHP のコードを改修することになります。

そのため、PHP の基礎文法や WordPress の仕様を把握しておくことで、コピペサイト等で紹介されているコードの挙動を理解し、安心して応用することができます。

本書は、ブログが開設できれば十分という方には不要かもしれません。

しかし、深いレイヤーでカスタマイズを行いたい方や、将来的に WordPress を用いたサイト制作を仕事にしたい方にはおすすめです。

PHP と WordPress を一石二鳥で学びたいコスパ重視の方にもおすすめです。

WordPress オリジナルテーマ制作入門

おすすめ度

WordPress におけるオリジナルテーマ制作の入門書です。

美容室サイトを実際に作りながら、テーマ制作をステップごとに学ぶことができます。

個人的には、とても分かりやすく、細かな疑問が解消されました。

ブログが開設できれば十分という方には不要ですが、将来的に WordPress を用いたサイト制作を仕事にしたい方にはおすすめです。

]]>
未経験から目指すエンジニア!基礎力養成のための必読書 https://cham.space/devbooks/ Sat, 01 Oct 2022 00:00:00 +0000 https://cham.space/?p=7153

新卒から大手 IT 企業で研究職として働く cham が、IT エンジニアの基礎力を養成する必読書をまとめました。 大学生の方、新卒の方、転職希望の方、副業を始めたい方、フリーランスを目指す方が対象です。 必須の知識やス ... ]]>

新卒から大手 IT 企業で研究職として働く cham が、IT エンジニアの基礎力を養成する必読書をまとめました。

大学生の方、新卒の方、転職希望の方、副業を始めたい方、フリーランスを目指す方が対象です。

必須の知識やスキルをはじめ、差別化を図り、重宝される人材になるための情報が満載の書籍をピックアップしました。

読めば直ぐに活用できる、実戦力を身に付けられる、むしろ、読まなければ損をする必読書です。

文系出身者をはじめとする、非エンジニアの社員を対象とした勉強会等でも利用しています。

興味のある書籍をチェックしてみてはいかがでしょうか。

1.

知識ゼロからのプログラミング学習術

プログラミングをマスターするための学習方法を学ぶことができます。

技術書による独学を始める前や、スクールに通う前など、本格的な学習前に読むと効果絶大です。

あらゆる言語を、無駄なく、挫折することなく、短期間で習得する術を身に付けられます。

有名大学の情報学科でも教えてくれない、一流プログラマの考え方を学びたい方におすすめです。

2.

21世紀最強の職業 Web系エンジニアになろう

最強のチート職業である「Web 系エンジニア」になるたのキャリアステップや必要なスキルが分かります。

Web 系エンジニアは、需要と将来性、単価、スキルの可搬性、ワークスタイルの柔軟性、フリーランス案件の充実度、転職の実現性など、あらゆる好条件が揃った理想の職業です。

cham も、本業の研究職から、Web 系エンジニアとしての副業・独立を目指しています。

転職・副業・独立を目指している方をはじめ、将来に悩む学生の方も、ぜひ一読することをおすすめします。

3.

プロになるためのWeb技術入門

Web アプリケーション開発における基本技術が、体系的にまとめられています。

ネットの断片的な情報を頼りにするのではなく、全体像を把握することで、「なぜこの処理を実装するのか?」など、背景を踏まえた根拠のある無駄のない開発を行うことができます。

古い本ではありますが、現代でも根本は変わっておらず、大学の情報学科で学ぶ技術を、短期間で習得できます。

Web アプリ開発に興味がある方や、全体像を理解したい方におすすめです。

4.

この一冊で全部わかるWeb制作と運用の基本

Web 制作に伴う、企画設計、デザイン、実装、集客、改善までの一通りの工程に沿った基本事項や実務がまとめられています。

数多のサイト制作・運用に携わってきたプロが教えるノウハウを学ぶことで、留意すべきポイントや、身に付けるべきスキルを把握することができます。

企業の Web 担当の方や、Web 制作を始めたい方におすすめです。

5.

HTML/CSS&Webデザイン1冊目の本

Web サイトを作りながら HTML / CSS とデザインの基本を学ぶことができます。

cham は、これまでに何冊もの技術書を通じて HTML / CSS の基礎を学びましたが、正直、この 1 冊で十分です。

必要十分な情報が綺麗にまとめられています。

また、プロが制作時に参考にしているサイト集や、初学者必携のチートシートなど、痒い所に手が届く Tips も豊富です。

HTML / CSS の基礎を短期間でサクッと学び、JavaScript や PHP など、次の技術習得に移りたい方におすすめです。

6.

はじめてつくる React アプリ with TypeScript

開発現場ではスタンダードになっている TypeScript を使った React について学ぶことができます。

TypeScript は JavaScript の拡張版言語であり、React は JavaScript の有名なフレームワークです。

ピンと来ないかと思いますが、委託案件数が多いうえに単価も高いなど、需要性は高く、学んで損がない技術です。

HTML / CSS の基本を抑えた後に、ひとまず、有名な Web 言語やフレームワークを用いて実際にアプリを作りながら、実装からデプロイまでの一連の開発をトレースしたい方におすすめです。

外食を一回我慢すれば手に入る価格で購入できます。

「ひとまず体験してみよう」といった気軽さでハンズオンが可能なところもポイントです。

7.

一流プログラマーが教える Python プロフェッショナル大全

シリコンバレーのトップ IT 企業で活躍する著者が解説する Python の入門書です。

9 万人に選ばれた人気 No.1 のオンライン講座が書籍化され、パワーアップしました。

基礎から応用まで、海外企業でも通用する一流のプログラミングスキルを、この 1 冊で学ぶことができます。

一流だからこそ知るエンジニアとしての成功戦略やノウハウも身に付きます。

画像処理、機械学習、データ分析、Web 開発などなど、Python は汎用性が高く、需要や将来性も高い人気の言語です。

短期間で学習でき、文法も簡単であるため、最初に学ぶ言語としても適しています。

一流プログラマから世界標準の知識や技術を学びつつ、ニーズの高いプログラミング言語を学ぶことができる一石二鳥の書籍をお探しの方におすすめです。

8.

Python で儲かる AI をつくる

Python を用いた機械学習の入門書です。

見込み客、土日の需要、商品リコメンドなど、営業やマーケティングで役立つ学習モデルの構築方法を学ぶことができます。

ブラウザから利用できる無料サービス(Google Colaboratory)で完結するため、開発環境を構築する必要はなく、パソコンがあれば直ぐに始められます。

実用的かつ即戦力となるプログラムを組みながら、Python を学びたい方におすすめです。

9.

この一冊で全部わかるサーバーの基本

サーバの入門書です。

サーバの種類や役割をはじめ、クラウド、仮想化、コンテナなど、「よく耳にするけど実態が分からない」と多くの方が思う専門用語や仕組みが丁寧に解説されています。

非技術者の方でもスムーズに理解できます。

基本知識を抑えておくだけでも、仕様検討、設計、アプリのセキュリティ審査など、よくある実務にて、全体像を把握しながら安心して進めることができます。

新卒の方、情報セキュリティ担当の方、サービス企画開発担当の方など、インフラ周りを体系的に学びたい方におすすめです。

10.

AWS の基本・仕組み・重要用語が全部わかる教科書

Amazon Web Services(AWS) の入門書です。

AWS 社の認定資格を持つトップエンジニアが、基本や仕組み、実務で活かせるノウハウを解説しています。

AWS は代表的なクラウドサービスであり、IT 企業に所属する方、特に開発チームであれば、かなり高い確率で利用する機会が訪れます。

cham 自身、入社当初は AWS を用いたアプリのアーキテクチャ設計と実装を担当しており、実務と並行しながら勉強しました。

ちなみに、AWS を扱った副業案件は多く、転職サイトの求人条件にも記載がある事が多いです。

一方、AWS を自由自在に扱うことができるエンジニアは意外と少ないため、差別化できるスキルとなっています。

本書は、AWS をこれから勉強する方や、改めて体系的に知識をまとめたい方、将来的なスキルセットにしたいにおすすめです。

11.

macOS × コマンド入門

Mac が備えるターミナルの入門書です。

基本的なコマンドの使い方、環境変数の設定、Homebrew によるパッケージ管理など、プログラミングの環境構築をはじめ、CUI を扱うシーンで必須となる技術を学ぶことができます。

頻出かつ最低限必要なコマンドがまとめられており、短期で習得できます。

Mac ユーザは多いですが、ターミナルを使いこなせる方は、意外と少ないです。

非技術者の方でも、知っておくとかなり便利で、ターミナルでしか参照・設定できないことにリーチできるなど、扱い方の幅が広がります。

ターミナルの扱いに不安がある方や、使えるようになりたい方におすすめです。

12.

いちばんやさしい Git & GitHub の教本

Git と GitHub の入門書です。

Git はソースファイルのバージョン管理システムであり、最も代表的なものです。

GitHub はオンラインでソフトウェア開発を管理する Git ベースのホスティングサービスであり、最も代表的なものです。

本書には、実際のワークフローに沿った一通りの使い方が、丁寧に解説されています。

各コマンドの目的や動作、よくあるケースへの対処方法など、実務に直結する知識が満載です。

個人的には、付録のコマンドリファレンスが便利で重宝しています。

初学者をはじめ、最新情報を取り入れつつ、改めて使い方を整理したい方におすすめです。

13.

UI デザイン必携

UI の入門書です。

デザインの普遍的な考え方、人間の心理や習性を考慮したルール、よくある失敗に対する防御策など、ソフトウェア開発の命運を左右するガイドラインがまとめられています。

ユーザを迷わせず、余計な手間もかけさせることなく、直感的に使えるようにするための知識が身に付きます。

初学者をはじめ、仕様検討や設計で重宝される UI デザイナーを目指している方にもおすすめです。

cham の場合、アプリベンダやデザイナーから提示された草案へのレビューが頻繁にありますが、根拠を持ったコメントを行う上で、こうしたガイドラインは大変重宝しています。

14.

「ついやってしまう」体験のつくりかた

元任天堂の企画開発者による UX の入門書です。

任天堂のゲームを題材に「人の心を動かし、人に行動させる」仕組みを散りばめた体験デザインの作り方を学ぶことができます。

企画開発、マーケティング、営業など、幅広く役立つ知識が満載で、職種を問わず、全ての方におすすめです。

つい夢中になってしまうため、数時間で読み終えることもできます。

ちなみに、cham の大学時代の先輩で、任天堂のエンジニアの方がいますが、その先輩もこの本を熟読し、参考にしているそうです。

15.

なるほどデザイン

デザインの入門書です。

デザイナーが重視するポイントや、良し悪しの判断基準を、イラストを元に視覚的かつ具体的に学ぶことができます。

資料作成をはじめ、ポスター、看板、チラシ、パンフレットなど、デザインの検討が必要なあらゆるシーンで万能に役立ちます。

根拠ある洗練されたデザインの選択・決定ができるようになりたい方におすすめです。

16.

PowerPoint 「最強」資料のデザイン教科書

PowerPoint におけるデザインルールとテクニックの解説書です。

外資系 IT 企業で、年間 100 冊前後の提案書作成を行い、専門部署を立ち上げるまでに至った、著者の経験とノウハウが凝縮されています。

「情報を正確かつ魅力的に伝えるためのデザイン」と「PowerPoint スキル」を同時に学ぶことができます。

読み手を引き込み、内容に説得力を与える資料を作りたい方におすすめです。

エンジニアでも、開発プロダクトのプレゼン発表など、スライド作成の機会は多いです。

資料の完成度は、プロダクトの印象を大きく左右しますので、スキルセットの 1 つとして、本腰を入れて学習しておくことをおすすめします。

17.

Excel 最強の教科書

Excel のテクニック集です。

作業効率を劇的に改善できる時短ワザから、データ集計・分析テクニックまで、仕事がデキる人は知っている使い方が厳選されています。

Excel は、業種や業界を問わず、必ずと言ってよいほど利用する必須ツールです。

そのため、一度学べば、一生役に立つスキルとなり、業務成果に直結します。

汎用スキルを手に入れたい方におすすめです。

エンジニアの場合、CSV を扱う機会の方が多く、Excel を扱う機会は少ないかもしれません。

しかし、「技術者なら使えて当たり前でしょ?」という風潮に応えるため、また、仕事の幅を広げるためにも、本腰を入れて学んでおくことをおすすめします。

18.

世界のマーケターは、いま何を考えているのか?

世界の 100 を超えるマーケティング事例を通して、未来のビジネスアイデアを得る解説本です。

有名マーケターの手法やテクニック、現代の消費者意識やキーワードを学びます。

同じエンジニアでも、ただモノを作るだけではなく、市場動向やニーズを捉え、機能、UI/UX、デザイン、ビジネスモデルの提案ができれば差別化を図ることができます。

本書は、実例からマーケティングを学びたい方、付加価値の高い技術者を目指したい方におすすめです。

19.

僕らは SNS でモノを買う

執行役員 CMO である著者が、SNS マーケティングの法則をまとめた解説書です。

SNS により、誰でも簡単にメディアを立ち上げ、広報活動が可能になった時代で、どうすれば商品やサービスの購入に繋げられるかを学ぶことができます。

キーワードは、ズバリ「UGC」と「ULSSAS」です。

SNS を運用したい初学者の方、企業の広報担当の方、店舗運営者などにおすすめです。

エンジニアでも、副業・フリーランスとして独自プロダクトやサービスの情報発信などを行いたい場合には、学んでおくことをおすすめします。

20.

ゼロからわかるビジネス Instagram

Instagram マーケティングの入門書です。

SNS 世代の購買行動プロセスの研究に従事するプロが、運用ノウハウを解説しています。

基本的な使い方をはじめ、予算や知名度に頼らずフォロワーや投稿を伸ばす方法、売上に繋げる法則を学ぶことができます。

SNS を運用したい初学者の方、企業の広報担当の方、店舗運営者などにおすすめです。

技術者でも、コンサル Web エンジニアのような働き方を目指す場合、Instagram の運用は必須となるため、学んでおくことをおすすめします。

21.

コンサル一年目が学ぶこと

デキる社会人になるための基礎力がまとめられた書籍です。

どんな時代、どんな仕事でも通用する 50 のスキルを学ぶことができます。

新卒研修などで学ぶ基本的なことですが、意外と実践できておらず、ハッとさせられます。

年次を問わず、改めてビジネスパーソンとして一生役立つ普遍的なスキルを学びたい方におすすめです。

技術力の高いエンジニアでも、社会人としての基礎力がなければ、信頼を損ない、もったいない評価に繋がりかねません。

特に、フリーランスを目指す方は、業務委託元からの信用貯金を増やすためにも学んでおくことをおすすめします。

22.

5日間で言葉が「思いつかない」「まとまらない」「伝わらない」がなくなる本

伝える技術を学ぶ書籍です。

漠然とした思いや、入り組んだ情報をまとめ、的確に伝えるための、25 のメゾットを学ぶことができます。

語彙力・表現力が不足していると悩んでいる方、急な質問に上手く答えられない方などにおすすめです。

エンジニアも、説明・報告の機会がとても多いので、学んでおくことをおすすめします。

]]>
マニアが厳選!買って良かったワイヤレスイヤホン特集 https://cham.space/earphone/ Sun, 07 Aug 2022 12:00:00 +0000 https://cham.space/?p=8264

これまで、あらゆるイヤホンを買い漁り、常時利用してきた cham が、どれを選んでも後悔しないおすすめのワイヤレスイヤホンを厳選しました。 cham は、学生時代から現在まで、通勤通学や会議、ワークアウト、ショッピングな ... ]]>

これまで、あらゆるイヤホンを買い漁り、常時利用してきた cham が、どれを選んでも後悔しないおすすめのワイヤレスイヤホンを厳選しました。

cham は、学生時代から現在まで、通勤通学や会議、ワークアウト、ショッピングなど、様々なシーンで常に身に着けています。

特に、プログラミング中は、基本的に外すことはなく、音楽を聴いています。

最近では、常に 3 つ以上のイヤホンを持ち歩き、気分や用途に合わせて切り替えて使うなど、もはやアクセサリーです。

仕事でも、開発プロダクトにおける接続試験などで、各メーカーのイヤホンを扱っています。

そのような cham が、スペックや使い心地をはじめ、どのような方が購入すべきかをまとめました。

SONY

誰もが知っている世界の電子機器メーカーです。

高品質で多機能なイヤホンをお求めの方や、イヤホン選びで失敗したくない方、購入後の手厚いサポートをお求めの方におすすめです。

LinkBuds S

業界最高クラスのイヤホンの 1 つです。

ノイズキャンセリングとハイレゾに対応した、世界最小・最軽量のワイヤレスイヤホンです。

音質と遮音性が非常に優れており、コンパクトで耳のフィット感が良く、通信も安定しています。

高音質の音声コンテンツを楽しみたい方や、クリアで安定した音声通話をしたい方をはじめ、耳が小さい方におすすめです。

LingBuds S

SONY

発売年2022 年音質
参考価格26,400 円ノイズキャンセリング
形状カナル型遮音性
質量約 4.8 g × 2通話品質
電池持続時間6 時間装着感
ワイヤレス充電防水等級IPX4

WF-1000XM4

LinkBuds S の 1 つ前のモデルです。

音質と遮音性が非常に優れており、電池持続時間も長いです。

高音質の音声コンテンツを楽しみたい方や、クリアで安定した音声通話をしたい方をはじめ、充電なしで長時間利用したい方におすすめです。

WF-1000XM4

SONY

発売年2021 年音質
参考価格33,000 円ノイズキャンセリング
形状カナル型遮音性
質量約 7.3 g × 2通話品質
電池持続時間8 時間装着感
ワイヤレス充電防水等級IPX4
類似の高評価モデル

Sennheiser

ゼンハイザーは、ドイツの有名な音響機器メーカーです。

元より、映像制作や放送局などのスタジオで利用される機材を提供しており、プロからの人気が高く、品質はお墨付きです。

75年以上もの間、世界中のミュージシャンやプロのサウンドエンジニア、オーディオ愛好家から厚い信頼と支持を得ています。

お値段は高いですが、奮発して購入する価値は大いにあります。

たまに、電車内で着けている方を見かけますが、高級感や重厚感が圧倒的にあり、高級アクセサリーとして使いたい方にもおすすめです。

Momentum True Wireless 3

最新モデルです。

低中域の音圧が強く、臨場感や迫力が圧倒的であり、高域の音質も素晴らしいです。

ノイズキャンセリングもとても自然であり、嫌な閉塞感はありません。

ロックや EDM などの重低音を重視している方や、音楽制作をしている方に、特におすすめです。

MOMENTUM True Wireless 3

Sennheiser

発売年2022 年音質
参考価格39,930 円ノイズキャンセリング
形状カナル型遮音性
質量5.8 g × 2通話品質
電池持続時間7 時間装着感
ワイヤレス充電防水等級IPX4

CX Plus True Wireless

最もコスパが良いと思うモデルです。

高品質かつ必要十分な機能を備えたうえ、軽量かつコンパクトであり、充電持続時間も長く、長時間使用しても耳が疲れません。

ゼンハイザーのワイヤレスイヤホンを初めて購入される方におすすめです。

CX Plus True Wireless

Sennheiser

発売年2021 年音質
参考価格21,780 円ノイズキャンセリング
形状カナル型遮音性
質量6 g × 2通話品質
電池持続時間8 時間装着感
ワイヤレス充電×防水等級IPX4
類似の高評価モデル

Beats

ビーツは、アメリカの有名なオーディオ機器ブランドです。

重低音のダイナミックなサウンドや、デザインのスタイリッシュさに定評があり、そのうえコスパも良いため、若者を中心に高い人気があります。

高品質かつファッション性の高いイヤホンをお探しの方におすすめです。

Fit Pro

重低音がとてもパワフルでありつつ、中域から高域までの音粒のバランスが絶妙に良いです。

通話品質も良く、低遅延でクリアな音声の安定した会話が可能です。

音声コンテンツ用途はもちろん、コミュニケーション用途にも、一石二鳥に使える高品質なワイヤレスイヤホンをお探しの方におすすめです。

Fit Pro

Beats

発売年2022 年音質
参考価格28,800 円ノイズキャンセリング
形状インナーイヤー型遮音性
質量5.6 g × 2通話品質
電池持続時間6 時間装着感
ワイヤレス充電×防水等級IPX4

Studio Buds

Beats の中で、最もコスパが良いと思うモデルです。

軽量かつコンパクトでありながら、パワフルで臨場感のあるサウンドを楽しむことができます。

また、充電持続時間も長く、フィット感も非常に優れており、ストレスなく着けていられます。

カラーバリエーションも 6 色と、他のユーザと被りたくない方にもおすすめです。

Studio Buds

Beats

発売年2022 年音質
参考価格21,800 円ノイズキャンセリング
形状インイヤー型遮音性
質量5 g × 2通話品質
電池持続時間8 時間装着感
ワイヤレス充電×防水等級IPX4
類似の高評価モデル

Jabra

ジャブラは、デンマークのオーディオ機器メーカーです。

補聴器ブランドを傘下に持っており、その技術を活かし、ワイヤレスイヤホンをはじめ、オンライン会議用のオフィス周辺機器の開発に注力しています。

低音域は重厚であり、高音域は非常にクリアに聴こえるところが特徴です。

医療用オーディオメーカーならではのノウハウが活かされた、エレガントな音質や装着感を体験したい方におすすめです。

Elite 7 Pro

骨に響くような深みとインパクトのある音質です。

装着感も非常に優れており、全くストレスを感じません。

重低音や重厚感、装着感を重視している方におすすめです。

Elite 7 Pro

Jabra

発売年2021 年音質
参考価格27,280 円ノイズキャンセリング
形状カナル型遮音性
質量5.4 g × 2通話品質
電池持続時間8 時間装着感
ワイヤレス充電防水等級IP57

Elite 7 Active

「Elite Pro 7」のワークアウト用モデルであり、Jabra の中で、最もコスパが良いと思うモデルです。

どんなに激しい運動を行っても、外れて落ちてしまうどころか、ズレさえしません。

通話性能も良く、風切り音が完全に遮断され、屋外でも動きながらでもクリアな通話を行うことができます。

ランニングや筋トレなど、スポーツ時に利用したい方には、特におすすめです。

Elite 7 Active

Jabra

発売年2021 年音質
参考価格23,980 円ノイズキャンセリング
形状カナル型遮音性
質量5.5 g × 2通話品質
電池持続時間8 時間装着感
ワイヤレス充電防水等級IP57
類似の高評価モデル

JBL

ジェイビーエルは、アメリカの音響専業ブランドです。

元はプロの機材と同じ性能を持った家庭用スピーカーの製造を目指し設立され、その技術を活かし、ワイヤレスも展開しています。

プロアマ問わず、厚い信頼と人気があり、様々な層のユーザから愛用されています。

良質で本格的なサウンドを楽しみたい方におすすめです。

TOUR PRO+ TWS

パワフルなサウンドが特徴的です。

ノイズキャンセリングもしっかりと効き、静寂に包まれます。

人が多い場所での通話も、周囲の雑音を取り除き、こちらの音声をクリアに伝えることができます。

このモデルはセール価格で販売していることが多いため、高級ブランドのワイヤレスイヤホンを安く購入したい方におすすめです。

TOUR PRO+ TWS

JBL

発売年2021 年音質
参考価格24,300 円ノイズキャンセリング
形状カナル型遮音性
質量7.5 g × 2通話品質
電池持続時間8 時間装着感
ワイヤレス充電防水等級IPX5
類似の高評価モデル

BOSE

ボーズは、アメリカの音響機器メーカーです。

マサチューセッツ工科大学の教授「アマー・G・ボーズ」氏が、自身の研究成果を元に製品化し、設立した企業です。

元より、深く響く重低音に特化したスピーカーに定評があり、その技術を活かしたイヤホンが高い評価を得ています。

QuietComfort Earbuds

サイズは大きく少し重いですが、その分、迫力とインパクトが非常に優れています。

一般的なイヤホンは、音量を下げると低音が薄れてしまいますが、独自技術により、音量に合わせて最適化されます。

また、ノイズキャンセリングもしっかりと効き、没入感を味わうことができます。

日本では、このモデルを利用しているユーザが少ないため、他の人と被りたくないという方にもおすすめです。

QuietComfort Earbuds

BOSE

発売年2020 年音質
参考価格33,000 円ノイズキャンセリング
形状インナーイヤー型遮音性
質量8.5 g × 2通話品質
電池持続時間6 時間装着感
ワイヤレス充電防水等級IPX4
類似の高評価モデル

AVIOT

アビオットは、日本のオーディオブランドです。

2018 年に「プレシードジャパン株式会社」から生まれた比較的新しいブランドです。

日本語を聞き慣れた人が、最も心地よく感じるサウンドを再現しており、J-POP との親和性に優れています。

また、デザイン性が非常に高く、ラインナップもとても豊富であり、まるでアクセサリーです。

小さな耳にもしっかりフィットすることも特徴で、女性にもおすすめです。

ちなみに、公式直販の方がクーポン適用などにより、割引価格で購入可能です。

TE-BD21j-ltd

中高音域が非常にクリアで、ボーカルの声がしっかりと聴こえる繊細なサウンドです。

マイクの性能も優れており、ノイズの少ないクリアで自然な通話が可能です。

ノイズキャンセリングなど、純粋な原音を阻害しかねない機能はあえて取り除き、Qualcomm 社の最新チップを搭載しています。

イヤホンのデザインがお洒落なことはもちろん、収納ケースはジュラルミン素材で高級感があふれ、気分が上がります。

AVIOT のハイエンドモデルをお求めの方におすすめです。

TE-BD21j-ltd

AVIOT

発売年2021 年音質
参考価格19,800 円ノイズキャンセリング×
形状カナル型遮音性
質量5.7 g × 2通話品質
電池持続時間9.5 時間装着感
ワイヤレス充電×防水等級IPX4

TE-BD11tR

重低音の表現力が高いモデルです。

独自技術の「ULTRA DEEP BASS」により、沈み込むような重低音を楽しむことができます。

中高音域もクリアで、ボーカルの声もしっかり聴こえ、バランスが良いです。

ノイズキャンセリングの性能も非常に高く、圧倒的な没入感を味わえます。

低音を重視ししつつ歌詞もしっかり聞きたい方におすすめです。

TE-BD11tR

AVIOT

発売年2022 年音質
参考価格16,940 円ノイズキャンセリング
形状カナル型遮音性
質量約 7.8 g × 2通話品質
電池持続時間18 時間装着感
ワイヤレス充電防水等級IPX4

TE-D01m2

高級モデルを凌駕する高音質と豊富な機能で、コスパが非常に高いモデルです。

ハイレゾ再生、アクティブノイズキャンセリング、音声と映像の低遅延処理など、様々な機能を備えています。

本体はやや重いですが、フィット感は損なわれず、ストレスも感じません。

コスパを重視する方や、AVIOT のモデルを初めて購入される方におすすめです。

TE-D01m2

AVIOT

発売年2021 年音質
参考価格14,850 円ノイズキャンセリング
形状カナル型遮音性
質量約 13 g × 2通話品質
電池持続時間10 時間装着感
ワイヤレス充電防水等級IPX4
類似の高評価モデル

JPRiDE

ジェイピー・ライドは、日本のオーディオブランドです。

2013 年設立の「株式会社エムピートレーディング」から生まれた比較的新しいブランドです。

ハードロックやメタルに傾倒していた創設者が、ハイブランドの音質を低価格で提供することをモットーに製品化しています。

一流ブランドが利用する工場を厳選して製造を行い、中間コストやムダを極限まで削り、本質的な機能実装を追求しています。

そのため、低価格にも関わらず、クオリティが非常に高いです。

ハイブランドにも劣らない高品質・多機能のワイヤレスイヤホンを、リーズナブルに購入したい方におすすめです。

model J ANC

業界最高クラスのコスパを誇るモデルです。

一流ブランドのワイヤレスイヤホンに遜色ない、機能と品質を備えながら、価格はおおよそ 1/4 以下です。

多機能かつハイクオリティであり、気兼ねなく利用できるワイヤレスイヤホンをお探しの方におすすめです。

model J ANC

JPRiDE

発売年2022 年音質
参考価格6,800 円ノイズキャンセリング
形状カナル型遮音性
質量5.2 g × 2通話品質
電池持続時間6.4 時間装着感
ワイヤレス充電×防水等級IPX6
類似の高評価モデル

Anker Soundcore

アンカーは、中国に本社を置く、モバイルバッテリーを中心とした電子機器メーカーです。

そのアンカー発のオーディオブランドが、サウンドコアです。

他のメーカーの高級モデルに劣らない、多機能で良質なワイヤレスイヤホンを、低価格提供しています。

コスパに優れたワイヤレスイヤホンをお探しの方におすすめです。

Liberty 3 Pro

最新モデルです。

独自技術が存分に活かされ、高品質かつ機能が豊富なコスパ抜群のモデルです。

高級ブランドに劣らないクオリティを、半額で手に入れたい方におすすめです。

Liberty 3 Pro

Anker Soundcore

発売年2021 年音質
参考価格17,800 円ノイズキャンセリング
形状カナル型遮音性
質量7.0 g × 2通話品質
電池持続時間8 時間装着感
ワイヤレス充電防水等級IPX4

Life P3

Soundcore の中で、最もコスパが良いと思うモデルです。

「Liberty 3 Pro」と比較すると、ハイレゾ再生や 3D オーディオ機能は備わっていませんが、十分な品質のサウンドです。

価格も 9,000 円ほど安いです。

低価格で、必要十分なクオリティのワイヤレスイヤホンをお求めの方におすすめです。

Life P3

Anker Soundcore

発売年2021 年音質
参考価格8,990 円ノイズキャンセリング
形状カナル型遮音性
質量約 5.2 g × 2通話品質
電池持続時間7 時間装着感
ワイヤレス充電防水等級IPX5
類似の高評価モデル

SoundPEATS

サウンドピーツは、中国のオーディオブランドです。

2011 年の設立当初から、音響機器の設計・製造を行っているワイヤレスイヤホン専門の大手企業から生まれました。

研究開発で培った技術やノウハウを活かした高性能イヤホンを、リーズナブルな価格で提供することで人気を誇っています。

ワイヤレスイヤホン初心者の方や、サブイヤホンをお探しの方におすすめです。

H1

ハイエンドモデルです。

独自開発の音質向上技術により、重厚感のある低音域、クリアな中音域、透明感のある高音域からなるバランスの良いサウンドが再現されています。

ノイズキャンセリングの性能も高く、没入感を楽しむことができます。

低遅延のゲーミングモードが備わっており、映像と音声の遅延を最低限に抑えることも可能です。

音楽や映画はもちろん、ゲームで利用したい方におすすめです。

H1

SoundPEATS

発売年2021 年音質
参考価格8,980 円ノイズキャンセリング
形状カナル型遮音性
質量約 6.5 g × 2通話品質
電池持続時間10 時間装着感
ワイヤレス充電防水等級IPX5

Air 3 Pro

SoundPEATS の中で、最もコスパが良いと思うモデルです。

大口径 12 mm ダイナミックドライバーの採用により、自然で透明感がある立体サウンドが素晴らしいです。

また、Qualcomm の高性能チップ搭載により、従来機と比較して、音質と安定性が飛躍的に向上しました。

SoundPEATS のワイヤレスイヤホンを初めて購入される方におすすめです。

Air 3 Pro

SoundPEATS

発売年2022 年音質
参考価格6,480 円ノイズキャンセリング
形状カナル型遮音性
質量約 4.5 g × 2通話品質
電池持続時間6 時間装着感
ワイヤレス充電×防水等級IPX4
類似の高評価モデル
発売年2021 年音質
参考価格6,980 円ノイズキャンセリング
形状インナーイヤー型遮音性
質量3.7 g × 2通話品質
電池持続時間16 時間装着感
ワイヤレス充電×防水等級IPX4
]]>
就活生必見!FANUC の選考体験談 https://cham.space/jhfanuc/ Sat, 09 Jul 2022 00:00:00 +0000 https://cham.space/?p=7611

世界的に有名な FANUC の就活体験談です。 産業用ロボット開発における技術力の高さや、給与および株価の高さから、広く名を知られていますが、就職活動に関わる情報は断片的であり、ネットではあまり見かけません。 そこで、自 ... ]]>

世界的に有名な FANUC の就活体験談です。

産業用ロボット開発における技術力の高さや、給与および株価の高さから、広く名を知られていますが、就職活動に関わる情報は断片的であり、ネットではあまり見かけません。

そこで、自身の備忘録も兼ね、会社の基本情報や就活フローをまとめました。

大学生の就職活動や、社会人の転職活動の参考になればと思います。

FANUC の基本情報

事業内容

FANUC は、TOPIX Core30 の日本を代表する電気機器メーカです。

FA 事業、ロボット事業、ロボマシン事業が、会社を支える 3 本の柱となっています。

事業の根幹は、工作機械用の CNC 装置であり、サーボモータとレーザを組み合わせた基本技術による FA 事業が主力です。

また、基本技術を元に、ロボット事業とロボマシン事業が展開されています。

さらに、AI や IoT の連携による、製造業での生産性向上と効率化を目指したプラットフォーム開発など、IoT 事業も展開しています。

FA 事業 CNC、サーボモータ、レーザが主力商品であり、工場の自動化(Factory Automation)を扱う部門
ロボット事業 会社の代名詞である「黄色いロボット」が主力商品であり、大型ロボットやゲンコツロボット、協働ロボットなど、機械、電気・電子、食品・食料で活用される各種ロボットを扱う部門
ロボマシン事業 ロボドリル、ロボショット、ロボカットが主力商品であり、加工成形のための高性能な各種ロボットを扱う部門
IoT 事業 製造設備やデータの一元管理やデータ共有、異常検知を行うシステムが主力商品であり、生産性向上のための AI/IoT を扱う部門

強み

FANUC の強みは、競争力、利益率、無借金経営の 3 つです。

まず、世界規模の高いシェアを誇る製品が多く、国内外のあらゆる工場で利用されています。

特に、CNC 装置は、世界シェア 50%、国内シェア 70% を占めています。

サービス拠点も、北京、上海、インドなどのアジア、デトロイトやシカゴなどのアメリカ、そしてヨーロッパの各所にあり、製造、販売、メンテナンスを行っています。

広い範囲に進出することで、高い利益を確保できるほか、ある地域経済が崩れた場合に、他のエリアで収益を維持することもできます。

2 つ目の強みは、高い営業利益率です。

一般的に、事業が好調であると評価される営業利益率の水準値は 11% 以上ですが、コロナ渦による経済低迷の 2020 年度においても、FANUC は 14% を保っています。

2007 年度のピーク時には、40% 以上ありました。

3 つ目の強みは、無借金経営であることです。

一般的に、会社経営にあたり、銀行からの借入金や社債などの借金により自己資金を補いますが、FANUC の有利子負債は設立当時からゼロです。

そのため、Net Cash による順位、つまり「金持ち企業ランキング」にて、2021 年には、3700 社以上の上場企業のうち、8 位にランクインしています。

Net Cash とは、企業の手元流動性(現預金 + 有価証券)から有利子負債を差し引いた金額であり、金余りの度合いを示しています。

キャッシュを内部に抱えることで、業績悪化による倒産リスクを軽減することができます。

弱み

FANUC の弱みは、事業範囲が比較的狭く、大打撃を受けた場合の再建が難しいことです。

特に、昨今の世界的な景気低迷による影響が顕著です。

これまで、工場の自動化や、それに伴う産業用ロボットの需要は高く、FANUC 製品の受注が拡大し続けていました。

しかし、コロナ禍の影響で国内外、特に中国にける設備投資が止まり、業績不振に陥っていました。

とは言え、産業用ロボットの需要やメンテナンスニーズは依然として高く、景気回復に伴い、業績回復が見込まれています。

平均年収

2022 年時点の平均年収は、1364 万円です。

電気機器業界では、キーエンスに次ぎ、第 2 位です。

コロナによるパンデミック直後は減給したものの、景気回復の兆しが見え、平均年収は上昇傾向となっています。

2021 年の初任給は、学部卒で約 26 万円、大学院卒で約 27 万円と公表されています。

入社数年後の 25 ~ 29 歳の平均年収は、700 万円後半以上に達すると言われています。

実際、cham の友人で、同社 4 年目の社員に、2021 年の年収を聞いたところ、約 810 万円でした。

中途採用も積極的に行っており、条件により、初めから 800 万円を超えるとのことでした。

勤務地

本社は山梨県の忍野村です。

主要な研究開発の拠点であり、数々の施設が立ち並んでいます。

富士山の麓の広さ 54 万坪に渡る森の中にあり、東京から車で約 2 時間かかります。

ちなみに、忍野村には世界的に有名な「忍野八海」と呼ばれる神秘的な池があり、各国から観光客が集まる場所でもあります。

本社も含め、事業所は下記の通りです。

本社、研究所、工場 山梨県忍野村
壬生工場 栃木県壬生町
筑波工場 茨城県筑西市
隼人工場 鹿児島県隼人町
支社 日野、長野
支店 北海道、東北、越後、前橋、筑波、白山、大阪、中国、広島、九州
海外 アメリカ、ルクセンブルク、中国、韓国、台湾、インド、他

職種と専攻対応表

主に 3 つの職種があります。

研究開発 ・クライアントからの要望を元に商品の開発や設計、商品を用いたテスト加工を行う
・展示会への出展などを行う
生産技術 自社工場の自動化や安全性・生産性の向上に向け、設備の設計や導入・立ち上げを行う
セールス 国内外のクライアント先へ訪問し、ニーズの把握や自社研究所への橋渡し、見積作成、納期管理を行う

職種に対して募集している大学の専攻は下表の通りです。

職種 商品 機械系 電気電子系 情報系 材料系 物理系 その他
研究開発 CNC ハード
CNC ソフト
サーボモータ
サーボアンプ
レーザ発振器
ロボット機構設計
ロボットソフト
ロボマシン
生産技術
セールス

体験談

cham は、最終面接まで進みました。

しかし、並行して就活を進めていた現在の会社から採用されたため、最終面接は辞退させていただきました。

最終面接に参加していた場合、最終面接までの選考や人事とのメールの感触的に、おそらく採用いただけたかと思われます。

選考フローと cham の活動

cham が就活を行った年度の体験ベースで、FANUC の就職活動について解説します。

インターンシップ(8月~ 9月)

夏季または冬季に本社にてインターンシップが開催されます。

cham が参加した当時の場合、本社の忍野村にて、2 日間(8:30 ~ 17:45)に渡り、下記内容で実施されていました。

  • 会社説明
  • 最新自動化工場の見学
  • 社員との対談
  • 「未来のロボットを考える」をテーマとしたグループディスカッション

cham は、9/12 開催の回に参加しました。

まず、会社説明や工場見学にて、数々のロボットや研究施設、精密加工のサンプル等を目の当たりにすることで、技術力の高さに驚き、圧倒されました。

また、社員との対談は、一緒に昼食を取りながら行われました。

ネットでは収集できない、最前線で活躍するエンジニアだから分かる生の声を聴くことができます。

さらに、グループディスカッションは、十分な時間をかけ、同社の技術を活かした新しいロボットを検討し、発表します。

同社のモットーである「壊れない」「壊れる前に知らせる」「壊れてもすぐ直せる」に基づき提案します。

その他、社員寮に泊まり込みで実施されましたが、寮はとても広く、設備は整っており、とても快適に過ごすことができました。

昼食も無料で提供されましたが、品数は多いうえ、味も美味しく、充実していました。

ちなみに、参加賞として黄色い「FANUC ボールペン」と「FANUC キャップ」をいただけます。

後者の帽子は、工場見学の際に被ります。

MEMO

近年は、オンライン開催が基本のようです。

事前に会社案内ビデオやオンライン工場案内を視聴し、当日は社員による研究内容の説明や、技術者への質問会があるようです。

情報収集(11月~ 2月)

同じ学科の 1 つ上の先輩で、同社から内定を得ていた方が 3 人いました。

その 3 人それぞれから、面接当日の流れや形式、雰囲気、質問事項と回答などを聞き、面接対策をするうえで必要な情報を集めました。

また、大学 OB の現役社員(リクルータ)が大学を訪問した際には、同社が欲しい人材や人物像、会社の内情や給与など、最前線にいる社員だからこそ知るざっくばらんな話をしていただきました。

エントリー(3月)

他社と同様に、リクナビ等の就活アプリを通じ、エントリーし、マイページ登録を行いました。

マイページにて、人事から就活情報が展開されますので、定期的にチェックしました。

緊急性が伴う問い合わせを行う際は、人事に直接メールしました。

エントリーシート提出(3月)

マイページにて、ブラウザ上のフォームに回答を記載する形式のエントリーシートを提出します。

例年、300 文字以下の質問に対し、Web 上で記入し送信します。

cham が就活を行った年度の場合、質問事項は下記 3 点でした。

  • 学校で勉強または研究していることを具体的に教えて下さい。(300 文字以下)
  • 勉強または研究以外で、これまでに打ち込んできたことを具体的に教えて下さい。(300 文字以下)
  • あなたは、周囲の人からどのような人物だと言われますか?また、なぜそう言われるのか、ご自身の考えを教えて下さい。(300 文字以下)

エントリー時の cham の回答を紹介します。

あくまでも参考程度に留めてください。

学校で勉強または研究していることを具体的に教えて下さい。(300 文字以下)

情報技術に関わる様々な専門科目を学習しています。

画像処理や組込み制御をはじめ、ソフトウェア開発のためのプログラミング学習(C/C++/Java/Python)やアルゴリズムとデータ構造、ソフトウェア工学について学んでいます。

現在までに3DCGアプリケーションやタイピングゲーム、機械学習によるライントレーサロボットなどを開発しました。

直近では、ある企業が課題解決に公募してた Web システムのチーム開発を行いました。

研究は、画像処理と深層学習を用いた医学部との共同研究を行っています。

放射線治療における癌患者の医療画像から、呼吸に伴う腫瘍の軌道変化の高精度推定を行うシステムを開発しています。


勉強または研究以外で、これまでに打ち込んできたことを具体的に教えて下さい。(300 文字以下)

Web 開発に打ち込んできました。

サイト管理システムの WordPress とスクリプト言語(HTML/CSS/PHP)を学びながら、サイト制作を行っています。

大学 1 年時にプログラミングや情報技術の忘備録サイトを制作し、今日まで管理を続けています。

現在の月間訪問者数は約 2 万人で、5 つの記事が特定のキーワードで検索上位 10 位以内にヒットします。

また、知り合いのお店の HP とブログを制作し、管理しています。

基本的な実装に加え、訪問者解析ツールの Google アナリティクスを導入し、

お客様のニーズを分析することでブログの書き方やイベント情報の伝え方などをアドバイスさせていただいています。


あなたは、周囲の人からどのような人物だと言われますか?また、なぜそう言われるのか、ご自身の考えを教えて下さい。(300 文字以下)

周囲の人からは目標達成に向けた集中力と情熱がある人物だと言われます。

周囲の人がそう言う理由は、大学の課題や開発に対する私の取り組み方にあると考えます。

例えば Web システムのチーム開発ではチームリーダとして最優秀作品賞を目標に活動しました。

私は書店や図書館をめぐり、新たな知識や技術を短期的に学び、チーム勉強会を開催して共有しました。

また、問題解決のために計算機室に徹夜したり海外エンジニアとチャットしたりするなど、目標達成のためにあらゆる手段を講じました。

その結果、全 12 チームの中から、企業と学生の投票により最優秀作品賞に選ばれました。

こうした私の姿勢が周りの人の評価につながったのだと考えています。

工場見学(3月~ 4月)

エントリーシートを通過すると、工場見学に招待されます。

ただし、夏季または冬季のインターンシップに参加した場合、工場見学はスキップされます。

cham の場合、9 月のインターンシップに参加したため、この過程はスキップされました。

ちなみに、内定した先輩や、現役社員の情報によると、インターンシップや工場見学にて、勤務地の田舎さを目の当たりにし、脱落する就活生が多いそうです。

平均年収が圧倒的に高いにも関わらず、勤務地がある意味僻地であることから志望度が低下し、予想よりも倍率は高くないため、その意味でも狙い目な企業だと思います。

応募書類提出(3月~ 4月)

下記の書類を用意し、郵送にて提出します。

  • 履歴書(写真添付)
  • 成績証明書
  • 卒業証明書(学部生の場合は「卒業見込証明書」)
  • 修了見込証明書(大学院生の場合)
  • 健康診断書

書類一式を郵送後、書類選考が行われ、通過すると、ジョブマッチングに招待されます。

cham の場合、3/22 に書類一式を発送し、7 日後の 3/29 日に人事から書類選考通過の連絡をいただき、ジョブマッチングに招待されました。

参考までに、内定を獲得した大学の先輩や、ジョブマッチング当日に仲良くなった就活生も、同じく 1 週間以内に書類選考の連絡を受けていました。

MEMO

履歴書は、各大学の生協等で提供されるフォーマットを用いて作成すれば良いです。

各種証明書は、キャンパス内の自動発行機や、事務窓口、大学 HP の郵送申請などで取得します。

健康診断書も大学の保健センタ等で取得します。

証明書は発行に時間がかかる場合もあるため、余裕を持って入手することを推奨します。

ジョブマッチング(3月~ 4月)

ジョブマッチングとは、就活生のスキルや性格が会社に合っているかを判断する適性検査であり、実質的には 1 次面接です。

マイページから都合の良い日程を指定して予約しました。

先着順で枠が埋まっていくため、早めにスケジュールを調整し、予約することをオススメします。

cham は、なかなか予約枠を確保できず、4/12 になってしまいました。

cham が就活を行った年度におけるジョブマッチングの 1 日の流れは下記の通りです。

11:30 集合後 & バス移動 「富士山山中湖(ホテルマウント富士入口)」バス停に集合
11:45 書類記入 ・個人情報や希望職種、並行して就活を進めている企業などを記入する自己紹介シートを作成
・記入欄は小さいため、履歴書のアピールポイントを要約した文章の用意を推奨
・面接時に話のタネとして利用されるため注意
12:30 昼食 インターンシップ時とは異なる小さな社員食堂にて昼食
13:30 ジョブマッチング ・1 枠あたり十数人程度の就活生が参加
・数人ずつのグループに分けられ、グループごとに面接官が割り当てられ、1 人ずつ順番に面接
16:00 解散 グループごとに手配されたタクシーにて集合場所まで移動し、各自帰宅

また、ジョブマッチングの実施内容は、下表の通りです。

面接時間 約 25 分
面接形式 ・面接官 : 就活生 = 3 : 1
・面接官は幹部クラスのエンジニア 3 名
雰囲気 ・やや圧迫な印象
・面接官は砕けた口調であり、形式ばらず、自然な会話を通じ、様々な質問が行われる
・頭の後ろで腕を組んで聞いていたり、携帯電話が鳴ったりするシーンもあった
主な質問事項 ・志望理由
・大学で習得した専門知識やスキルは何か?
・大学の研究内容は何か?
・会社の事業内容や製品を知っているか?
・配属希望の事業部門と理由
・最終選考に進んでいる他社の内定が出たらどうするか?

cham のジョブマッチングの結果ですが、次の日の 4/13 にジョブマッチング「成立」の連絡が来て、最終選考(役員面接)の案内をいただきました。

MEMO

グループ全員の面接が完了するまで、全就活生が同じ部屋に待機しましたが、緊張感漂う空間であり、待ち時間が苦痛でした。

ただ、帰りのタクシーでは、就活生同士仲良くなり、大学の話や就活の話で盛り上がり、仲良くなりました。

その中の 1 人は、同社に入社しており、今も連絡を取り合う仲です。

役員面接(6月上旬)

代表取締役社長をはじめとする役員 4 ~ 6 名と、就活生 1 名の最終選考です。

先輩の話によると、改めて、志望動機や成績について質問されるが、入社意志の確認がメインであり、和やかな雰囲気で選考が行われるとのことでした。

役員面接の時点でほぼ内定が決まっているとのことです。

ただし、注意点があります。

FANUC は推薦応募のみで、自由応募はなく、学校推薦書を用意し、役員面談時に提出する必要があります。

一般的に、学校推薦を用いた選考の内定率は高い傾向にありますが、確実に内定をいただけるとは限りません。

また、学校推薦を提出した場合、基本的には内定を辞退することはできません。

そのため、cham は苦渋の決断の末、FANUC の役員面談より先に内定通知が来た現在の会社に承諾し、最終選考を辞退させていただきました。

最終結果通知(6月上旬)

先輩の話によると、内定者は、役員面談から数日以内に採用通知をいただけるとのことでした。

ただし、経過日数には個人差があるため、注意が必要です。

以上が、選考フローと cham の活動内容です。

就職・転職にオススメ

FANUC への就職・転職は、かなりオススメです。

既述の通り、FANUC の CNC は、世界中の工作機械に搭載されており、各種ロボットも主要国の産業で活躍しています。

世界に誇る高い技術を学びながら、グローバルに展開する同社の研究開発に貢献し、仕事を通じて世界に大きなインパクトを与えることができます。

また、平均年収が圧倒的に高いにも関わらず、勤務地が田舎であることから志望度が低下し、競争率はそれほど高くないため、狙い目な企業だと思います。

しかも、田舎とは言え、会社のすぐ近くに高速道路があり、東京まで 1、2 時間で遊びに行くこともできます。

cham は、学部 1 年時から、FANUC への新卒入社を希望していました。

現在、転職も検討していますが、同社も候補です。

]]>
初学者向け!RSA 暗号の基礎とシミュレーションの実装 https://cham.space/rsa/ Thu, 07 Jul 2022 00:00:00 +0000 https://cham.space/?p=7645

RSA 暗号の数学的理論や構成要素、アルゴリズムをまとめます。 また、C/C++ 言語により、秘密通信の簡易的なシミュレーションを実装します。 目次 予備知識 RSA 暗号の基礎 理論 用途 RSA 暗号のコンポーネント ... ]]>

RSA 暗号の数学的理論や構成要素、アルゴリズムをまとめます。

また、C/C++ 言語により、秘密通信の簡易的なシミュレーションを実装します。

予備知識

暗号とは

一般的に、暗号とは情報を当事者間以外では理解できないように変換すること、もしくは変換後の記号列を指します。

コンピュータにおいて、文字列をはじめとする通信情報は、全て数値データとして扱われます。

数学的理論に基づく処理により、元のデータを第三者による理解が困難なデータに変換し、変換後のデータは、特定の関係者のみが元のデータに変換することができます。

専門用語

暗号技術の分野において、頻繁に利用される専門用語は下記の通りです。

用語 意味
平文 元の情報
暗号文 第三者に理解できないように変換された情報
暗号化 平文から暗号文を生成すること
復号化 暗号文から平文を生成すること
暗復号化に必要なパラメータ
盗聴 第三者が暗号文を入手すること
解読 第三者が暗号文を復号化すること

暗号方式の比較

暗号通信において用いられる方式は、共通鍵暗号と公開鍵暗号と、大きく分けて 2 つあります。

共通鍵暗号

通信の当事者間で秘密鍵を持ち、暗号化と復号化とで同じ鍵を利用する方式です。

秘密鍵は重要な機密情報であり、厳重に扱う必要があります。

一般的に、暗復号化の処理速度は速いです。

ただし、通信の接続先ごとに異なる共通鍵を生成する必要があり、管理が煩雑になるうえ、送信の途中で第三者に盗聴され、解読されるリスクも高いです。

公開鍵暗号

暗号化と復号化とで、それぞれ別の鍵を利用する方式です。

基本的な用途である暗号通信においては、受信者が暗号化用の公開鍵と復号化用の秘密鍵とを用意し、公開鍵を送信者に共有したうえで、秘密鍵は厳重に秘匿します。

送信者は公開鍵により平文を暗号化して送信し、受信者は秘密鍵で暗号文を復号します。

一般的に、鍵ペアを 1 つ作ればよく、鍵の管理コストを抑えられるうえ、第三者に秘密鍵が盗聴されるリスクも低いです。

ただし、暗復号化にかかる処理速度は遅いです。

特徴比較と代表的なアルゴリズム

各暗号方式における特徴比較と代表的なアルゴリズムは下記の通りです。

共通鍵暗号 公開鍵暗号
鍵の生成者 基本的に送信者 受信者 / 送信者
鍵の数 接続先数(異なる秘密鍵) 1 ペア(公開鍵 + 秘密鍵)
鍵の保管 厳重 秘密鍵のみ厳重
安全性 比較的低い 高い
処理速度 速い 遅い
秘密通信
電子署名 不可
代表的なアルゴリズム AES RSA / 楕円曲線暗号

RSA 暗号は、公開鍵暗号方式であり、最も代表的なアルゴリズムの 1 つです。

RSA 暗号の基礎

RSA 暗号は、考案者である Rivest、Shamir、Adleman の頭文字を取って名付けられました。

彼らの所属していたマサチューセッツ工科大学が特許を取得し、その後設立された RSA セキュリティ社が独占ライセンスを所有していました。

しかし、現在は特許が切れ、誰でも自由に利用することができます。

理論

通常、平文は数バイト連続した 1 つの整数とみなされ、事前に決定しておいた整数により分割され、ブロック化されます。

ここで、ある平文ブロックを \(M_i\) とします。

暗号化

平文ブロック \(M_i\) を、暗号文ブロック \(C_i\) に変換します。

この変換では、\(M_i\) を \(e\) 乗して \(n\) で割った剰余を \(C_i\) とします。

$$ C_i = {M_i^e} \bmod n $$

これを、全ての平文ブロックに対して繰り返し行います。

復号化

暗号文ブロック \(C_i\) を、平文ブロック \(M_i\) に変換します。

この変換では、\(C_i\) を \(d\) 乗して \(n\) で割った剰余を \(M_i\) とします。

$$ M_i = {C_i^d} \bmod n$$

これを、全ての暗号文ブロックに対して繰り返し行います。

鍵の作成

暗復号化処理において利用したパラメータの \(n\) と \(e\) が公開鍵であり、\(d\) が秘密鍵となります。

鍵は、下記フローに従い事前に作成します。

  1. 異なる2つ素数 \(p\) と \(q\) を用意
  2. \(p\) と \(q\) の積 \( n\) を用意
  3. \(p \ – \ 1\) と \(q \ – \ 1\) の最小公倍数 \(m\) を用意
  4. \(m\) との最大公約数が \(1\) である任意の整数 \(e\) を用意
  5. \(e \cdot d \bmod m = 1 \) を満たす整数 \(d\) を用意

\(p\) と \(q\) は、値の異なる大きな素数です。

\(p\) と \(q\) の積 \( n \) は、法として利用されるため、法鍵とも呼ばれます。

\(p \ – \ 1\) と \(q \ – \ 1\) の最小公倍数 \(m\) と、整数 \(e\) との最大公約数が \(1\) であることから、\(m\) と \(e\) とは、互いに素であることが分かります。

最後の条件式は、\(m\) を法としたとき、\(e\) と \(d\) の積が \(1\) になる必要があることを意味しています。

法とは、特定の数学的体系を生み出す整数値です。

整数 \(n\) の法が与えられたとき、整数 \(x\) を \(n\) で除した剰余 \(r\) が求められます。

例えば、\( n = 4 \) とすると、下表になります。

\(x\) 0 1 2 3 4 5 6 7 \(\cdots\)
\(r\) 0 1 2 3 0 1 2 3 \(\cdots\)

周期性が生まれ、限られた範囲内の数値を用いた四則演算が可能になります。

小さな体系内では、べき乗計算による莫大な中間結果を避けることができ、暗号技術においては都合の良い閉じた世界になります。

解読困難性

RSA 暗号の安全性は、素因数分解が難しく、膨大な時間が掛かることにより担保されています。

解読には、秘密鍵 \(d\) が必要です。

秘密鍵を取得するには、法鍵 \(n\) を素因数分解し、\(p\) と \(q\) を求める必要がありますが、簡単ではありません。

適当な素数で \(n\) により割り切れるか否かを確認するなど、ブルートフォースアタックとほぼ同様の手法を試す他なく、\(p\) と \(q\) が十分に大きい場合、有効時間内に見つけることは難しいです。

用途

RSA 暗号の用途は、秘密通信と電子署名と、大きく分けて 2 つあります。

秘密通信

RSA 暗号の最も基本的な用途であり、暗号通信が目的です。

受信者が鍵を作成し、暗号化鍵 \(e\) と共通鍵 \(n\) を公開したうえで、復号化鍵 \(d\) を秘匿します。

鍵の作成(受信者)

「鍵の作成」に従い、鍵を準備します。

  • 暗号化鍵 \(e\) → 公開
  • 共通鍵 \(n\) → 公開
  • 復号化鍵 \(d\) → 秘匿
鍵の公開と秘匿(受信者)

暗号化鍵 \(e\) と共通鍵 \(n\) を公開します。

公開鍵は、基本的に盗聴されても問題はないため、メールや Web ページ、鍵センタなど、オンラインにて共有します。

つまり、「私に秘密のメッセージを送る場合は、この公開鍵により暗号化して送信してください」ということを意味します。

一方で、秘密鍵である復号化鍵 \(d\) は、盗聴されないよう厳重に管理します。

メッセージの暗号化(送信者)

受信者が提供する \((e,n)\) を用いて、変換式「\(C = {M^e} \bmod n\)」によりメッセージ(平文)を暗号化します。

その後、暗号文を送信します。

暗号文の復号化(受信者)

復号化鍵 \(d\) と共通鍵 \(n\) を用いて、変換式「\(M = {C^d} \bmod n\)」により暗号文を復号化します。

これにより、受信者は送信者のメッセージ(平文)を確認することができます。

以上が、秘密通信の基本的なフローになります。

STEP.3 における送信時、暗号文が盗聴されたとしても、復号化鍵 \(d\) は受信者のみが知る情報であるため、盗聴者による解読は難しいです。

たとえ、盗聴者が復号化鍵 \(d\) を推測して \(d^{\prime}\) を作り、暗号文を復号化したとしても、完全な平文を取得する可能性は低いです。

電子署名

RSA 暗号の応用的な用途であり、認証が目的です。

電子署名とは、電子文書における作成者の正当性を証明する技術であり、なりすましや情報の改ざんを防止する仕組みです。

紙文書において、本人であることを示すサインや印鑑に相当します。

送信者が鍵を作成し、復号化鍵 \(d\) と共通鍵 \(n\) を公開したうえで、暗号化鍵 \(e\) を秘匿します。

鍵の作成(送信者)

「鍵の作成」に従い、鍵を準備します。

  • 暗号化鍵 \(e\) → 秘匿
  • 共通鍵 \(n\) → 公開
  • 復号化鍵 \(d\) → 公開
鍵の公開と秘匿(送信者)

復号化鍵 \(d\) と共通鍵 \(n\) を、メールや Web ページ、鍵センタなど、オンラインにて公開します。

つまり、「私が作成した電子文書(暗号化済)を参照する場合は、この鍵で復号化してください」ということを意味します。

一方で、暗号化鍵 \(e\) は、盗聴されないよう厳重に管理します。

電子文書の暗号化(送信者)

自ら用意した \((e,n)\) を用いて、変換式「\(C = {M^e} \bmod n\)」により、電子文書(平文)を暗号化します。

その後、暗号文を何らかのプラットフォームにて公表します。

暗号文の復号化(受信者)

送信者が公開している復号化鍵 \(d\) と共通鍵 \(n\) を用いて、変換式「\(M = {C^d} \bmod n\)」により暗号文を復号化します。

これにより、受信者は送信者の電子文書(平文)を確認することができます。

送信者の復号化鍵により復号化が成功することは、その電子文書の作成者が送信者本人であることを示します。

以上が、電子署名の基本的なフローになります。

悪意を持った第三者が、上記フローの送信者になりすまし、偽造文書を作成する場合を考えます。

第三者は、公開されている復号化鍵 \(d\) と共通鍵 \(n\)  から \(e^{\prime}\) を推測し、偽造文書を暗号化して公表します。

しかし、偽造文書の暗号文は、\((d,n)\) により正しく復号化されず、意味不明な文字列のメッセージ等が生成されます。

そのため、受信者は、電子文書が偽造であることや、第三者が嘘の情報を流そうとしたと判断することができます。

RSA 暗号のコンポーネント

RSA 暗号を実装するうえで必要な数学的モジュールをまとめます。

下表は、鍵の作成や暗復号化に関わる構成要素の一覧です。

要素 パラメータ 条件または変換式
素数(1) \(p\) \(q\) と異なる大きな素数
素数(2) \(q\) \(p\) と異なる大きな素数
共通鍵
※ 秘密通信の公開鍵(1)
\(n\) \(n = p \cdot q\)
最小公倍数 \(m\) \(m = lcm(p \ – \ 1,q \ – \ 1)\)
暗号化鍵
※ 秘密通信の公開鍵(2)
\(e\) \(\gcd(e,m) = 1\)
復号化鍵
※ 秘密通信の秘密鍵
\(d\) \({e \cdot d} \bmod m = 1\)
暗号化 \(C_i = {M_i^e} \bmod n\)
復号化 \(M_i = {C_i^d} \bmod n\)

各構成要素を取得する過程や変換で必要なモジュールは下記 5 つです。

  • 冪剰余計算
  • 最大公約数の算出
  • 最小公倍数の算出
  • 素数判定
  • 逆数の算出

冪剰余計算

\(b^e \bmod m\) を求めます。

ここでは、最も基本的なバイナリ法を用います。

2 進数で表現された指数をフラグとし、積と法を取りながら反復的に計算していく方法です。

例題として、\(8^{23} \bmod 29\) を計算します。

\(23\) を 2 進数表記すると、\(10111\) です。

これより、

$$23 = 2^4 \cdot 1 + 2^3 \cdot 0 + 2^2 \cdot 1 + 2^1 \cdot 1 + 2^0 \cdot 1 = 16 + 4 + 2 + 1$$

と表せます。

また、\(8^{23} = 8^1 \cdot 8^2 \cdot 8^4 \cdot 8^{16}\) です。

このとき、下記が成り立ちます。

部分計算式 結果 フラグ
\(8^1 \bmod 29\) \(8\)
\(8^2 \bmod 29\) \(6\)
\(8^4 \bmod 29 = 6 \cdot 6 \bmod 29\) \(7\)
\(8^8 \bmod 29 = 7 \cdot 7 \bmod 29\) \(20\) ×
\(8^{16} \bmod 29 = 20 \cdot 20 \bmod 29\) \(23\)

このうち、フラグが 〇 の結果を用いて、

\(8^1 \cdot 8^2 \bmod 29 = 8 \cdot 6 \bmod 29 = 19\)

\(8^1 \cdot 8^2 \cdot 8^4 \bmod 29 = 19 \cdot 7 \bmod 29 = 17\)

\(8^1 \cdot 8^2 \cdot 8^4 \cdot 8^{16} \bmod 29 = 17 \cdot 23 \bmod 29 = 14\)

となります。

このように、中間結果があまり大きくならないうえ、乗算回数を抑えながら、効率良く冪剰余計算を行うことができます。

上記の「計算例」と同様のプロセスをプログラムで再現します。

#include <iostream>
using namespace std;

/*
    冪剰余計算 : b^e mod m
*/

long long powmod( long long b, long long e, long long m ) {

    long long result = 1; // 結果
    
    // 0 乗の場合、結果は 1
    if( e == 0 ) return result;
    
    // 指数が 0 になるまで法を取りながら積を計算
    while( e > 0 ) {
    
        // 奇数の場合: 最下位ビットが 1 = 求める解の因数として利用される
        if( e & 1 ) {
            e--; // 偶数にする
            result = result * b % m; // 解の更新
        }
        // 偶数の場合: 最下位ビットが 0 = 求める解の因数として利用されない
        else {
            e >>= 1; // 右に 1 ビットシフト
            b = b * b % m; // 部分計算
        }
    }
    
    return result;
}

/*
    冪剰余計算の結果を標準出力
*/

int main( int argc, char *argv[] ) {

    // 引数を忘れた場合の Segmentation fault 対策
    if( argc < 4 ) {
        cout << "Please input (b, e, m)" << endl;
        exit( 1 );
    }

    // 文字列型の引数を整数型に変換
    int b = atoi( argv[ 1 ] );
    int e = atoi( argv[ 2 ] );
    int m = atoi( argv[ 3 ] );

    // 冪剰余計算
    long long result = powmod( b, e, m );

    // 標準出力
    cout << b << " ^ " << e << " mod " << m << " = " << result << endl;

    return 0;
}

Windows と Mac における実行例です。

実行例(Windows)
実行例(Mac)

参考までに、プログラムにおける e(2 進数)と b(10 進数)、result(10 進数)の変化は下表の通りです。

e(2 進数) b(10 進数) result(10 進数)
10111 8 1
10110 8 8
1011 6 8
1010 6 19
101 7 19
100 7 17
10 20 17
1 23 17
0 23 14

最大公約数の算出

与えられた自然数 \((a,b)\) における最大公約数を求めます。

「ユーグリッドの互除法」を利用します。

$$ \gcd(a,b) = \gcd(b,a \bmod b) $$
#include <iostream>
using namespace std;

/*
    最大公約数の算出
*/

int gcd( int a, int b ) {
    
    // gcd(a,b) = gcd(b,a mod b) の法則を利用
    while( b > 0 ) {
        int t = a % b;
        a = b;
        b = t;
    }
    return a;
}

/*
    マンドライン引数に与えられた自然数の最大公約数を標準出力
*/

int main( int argc, char *argv[] ) {

    // 引数を忘れた場合の Segmentation fault 対策
    if( argc < 3 ) {
        cout << "Please input (a,b)" << endl;
        exit( 1 );
    }

    // 文字列型の引数を整数型に変換
    int a = atoi( argv[ 1 ] );
    int b = atoi( argv[ 2 ] );

    // 最大公約数の取得
    int result = gcd( a, b );

    // 標準出力
    cout << "GCD(" << a << "," << b << ") = " << result << endl;

    return 0;
}

Windows と Mac における実行例です。

実行例(Windows)
実行例(Mac)

最小公倍数の算出

与えられた自然数 \((a,b)\) における最小公倍数を求めます。

下記の法則を利用します。

$$ a \cdot b = \gcd(a,b) \cdot lcm(a,b) $$
#include <iostream>
using namespace std;

int gcd( int a, int b ); // プロトタイプ宣言

/*
    最小公倍数の算出
*/

int lcm( int a, int b ) {
    
    // a * b = gcd(a,b) * lcm(a,b) の法則を利用
    return ( a * b ) / gcd( a, b );
}

/*
    コマンドライン引数に与えられた自然数の最小公倍数を標準出力
*/

int main( int argc, char *argv[] ) {

    // 引数を忘れた場合の Segmentation fault 対策
    if( argc < 3 ) {
        cout << "Please input (a,b)" << endl;
        exit( 1 );
    }

    // 文字列型の引数を整数型に変換
    int a = atoi( argv[ 1 ] );
    int b = atoi( argv[ 2 ] );

    // 最大公約数の取得
    int result = lcm( a, b );

    // 標準出力
    cout << "LCM(" << a << "," << b << ") = " << result << endl;

    return 0;
}

/*
    最大公約数の算出
*/

int gcd( int a, int b ) {
    
    // gcd(a,b) = gcd(b,a mod b) の法則を利用
    while( b > 0 ) {
        int t = a % b;
        a = b;
        b = t;
    }

    return a;
}

Windows と Mac における実行例です。

実行例(Windows)
実行例(Mac)

素数判定

素数判定を行います。

ここでは、基本的なアルゴリズムを、参考も含め、4 つまとめます。

単純法

与えられた自然数 \(n\) の素数判定を行います。

ある自然数 \(k\) が合成数であるとき、\(\sqrt{k}\) より小さい素因数を必ず持ちます。

この性質を利用し、割り切れる数があるか否かを順次チェックします。

#include <iostream>
using namespace std;

/*
    単純法による素数判定
*/

// 引数に与えられた自然数の素数判定結果をリターン
bool simple( int n ) {
    
    if( n < 2 ) return false; // 2 未満は排除
    if( n == 2 ) return true; // 2 は素数
    if( n % 2 == 0 ) return false; // 2 以外の偶数は合成数(除算による偶数判定)
    
    // 3 以上の奇数でチェック
    for( int k = 3; k * k <= n; k += 2 ) { 
        if( n % k == 0 ) {
            return false; // 割り切れる場合は合成数
        }
    }

    return true; // 素数
}

/*
    コマンドライン引数に与えられた自然数以下の素数を標準出力
*/

int main( int argc, char *argv[] ) {

    // 引数を忘れた場合の Segmentation fault 対策
    if( argc < 2 ) {
        cout << "Please input N" << endl;
        exit( 1 );
    }

    // 文字列型の引数を整数型に変換
    int N = atoi( argv[ 1 ] );

    // 標準出力
    for( int n = 0; n <= N; n++ ) {
        if( simple( n ) ) {
            cout << n << " ";
        }
    }
    cout << endl;

    return 0;
}

Windows と Mac における実行例です。

実行例(Windows)
実行例(Mac)

エラトステネスの篩

与えられた自然数 \(N\) 以下の自然数における素数判定を行います。

単純法をベースに合成数のチェックを効率化した判定方法です。

アルゴリズムは下記の通りです。

  1. \(n\) までの整数を整列
  2. \(k\) が残っている場合、\(k\) 以外の \(k\) の倍数を除外
  3. \(k\) が \(\sqrt{n}\) を超えるまで 2. を反復
  4. 処理終了(最後まで残った数が素数)
#include <iostream>
#include <vector>
using namespace std;

/*
    エラトステネスの篩による素数判定
*/

// 引数に与えられた自然数以下の素数判定結果の配列をリターン
vector<bool> eratosthenes( int n ) {
    
    // 配列のインデックスに自然数値が対応
    vector<bool> result( n + 1, true );
    
    result[ 0 ] = false; // 0 は非素数
    result[ 1 ] = false; // 1 は非素数
    for ( int k = 2; k <= n; k++ ) {
        
        // 合成数であることが判明している場合はスキップ
        if ( !result[ k ] ) continue;

        // k は素数であるが、k の倍数は合成数
        for ( int mk = 2 * k; mk <= n; mk += k ) {
            result[ mk ] = false;
        }
    }

    return result;
}

/*
    コマンドライン引数に与えられた自然数以下の素数を標準出力
*/

int main( int argc, char *argv[] ) {

    // 引数を忘れた場合の Segmentation fault 対策
    if( argc < 2 ) {
        cout << "Please input N" << endl;
        exit( 1 );
    }

    // 文字列型の引数を整数型に変換
    int N = atoi( argv[ 1 ] );

    // N 以下の自然数における素数判定結果の取得
    vector<bool> result = eratosthenes( N );

    // 素数を標準出力
    for( int n = 0; n <= N; n++ ) {
        if( result[ n ] ) {
            cout << n << " ";
        }
    }
    cout << endl;

    return 0;
}

Windows と Mac における実行例です。

実行例(Windows)
実行例(Mac)

ミラーラビン法

与えられた自然数 \(n\) の素数判定を行います。

確率的素数判定法の 1 つです。

\(y = x^m \bmod n\) の形式における判定式を利用し、素数か否かをチェックします。

アルゴリズムは下記の通りです。

  1. \(n \ – \ 1 = 2^k m\) を満たす \((k,m)\) を算出
  2. \(2 \leqq a \leqq n \ – \ 1\) を満たす整数 \(a\) を無作為に用意
  3. \(y = a^m \bmod n\) を計算
  4. \(y = 1\) または \(y = n \ – \ 1\) の場合、素数であり、処理終了
  5. \(y = y^2 \bmod n\) を計算
  6. \(y = n \ – \ 1\) の場合は素数、\(y = 1\) の場合は合成数であり、処理終了
  7. \(0 \leqq i \leqq k \ – \ 1\) の場合、5. へ
  8. 処理終了(合成数)
#include <iostream>
#include <ctime>
using namespace std;

long long powmod( long long b, long long e, long long m ); // プロトタイプ宣言

/*
    ミラーラビン法による素数判定
*/

// 引数に与えられた自然数の素数判定結果をリターン
bool rabin( int n ) {
    srand( ( unsigned int )time( NULL ) );
    
    if( n < 2 ) return false; // 2 未満は非素数
    if( n == 2 ) return true; // 2 は素数
    if( !( n & 1 ) ) return false; // 2 以外の偶数は合成数(論理演算による偶数判定)

    /* n-1 = (2^k)*m を満たす (k,m) を算出 */

    // この時点で n は奇数であるため、n-1 は偶数であり、m は奇数
    int k = 0;
    int m = n - 1;
    while( !( m & 1 ) ) {
        m >>= 1; // 右に 1 ビットシフト = m を 1/2
        k++;
    }

    /* [2, n-1] を満たす乱数の生成 */
    int a = rand( ) % ( n - 2 ) + 2;

    /* 判定式 y = a^m mod n に基づくチェック */ 
    
    long long y = powmod( a, m, n );
    if( y == 1 || y == n - 1 ) {
        return true; // 素数
    }

    /* 判定式 y = y^2 mod n (0 <= i <= k-1) に基づくチェック */

    int i = 0;
    while( i < k ) {
        y = powmod( y, 2, n );
        if( y == n - 1 ) return true; // 素数
        if( y == 1 ) return false; // 合成数
        i++;
    }

    /* 判定式に基づくチェック終了 */
    return false; // 合成数
}

/*
    コマンドライン引数に与えられた自然数以下の素数を標準出力
*/
int main( int argc, char *argv[] ) {

    // 引数を忘れた場合の Segmentation fault 対策
    if( argc < 2 ) {
        cout << "Please input n" << endl;
        exit( 1 );
    }

    // 文字列型の引数を整数型に変換
    int N = atoi( argv[ 1 ] );

    // 標準出力
    for( int n = 0; n <= N; n++ ) {
        if( rabin( n ) ) {
            cout << n << " ";
        }
    }
    cout << endl;

    return 0;
}

/*
    冪剰余計算 : b^e mod m
*/

long long powmod( long long b, long long e, long long m ) {

    long long result = 1; // 結果

    // 0 乗の場合、結果は 1
    if( e == 0 ) return result;

    // 指数が 0 になるまで法を取りながら積を計算
    while( e > 0 ) {

        // 奇数の場合: 最下位ビットが 1 = 求める解の因数として利用される
        if( e & 1 ) {
            e--; // 偶数にする
            result = result * b % m; // 解の更新
        }

        // 偶数の場合: 最下位ビットが 0 = 求める解の因数として利用されない
        else {
            e >>= 1; // 右に 1 ビットシフト
            b = b * b % m; // 部分計算
        }
    }

    return result;
}

Windows と Mac における実行例です。

実行例(Windows)
実行例(Mac)

フェルマーテスト

与えられた自然数 \(n\) の素数判定を行います。

確率的素数判定法の 1 つです。

「フェルマーの小定理」の対偶命題を利用し、合成数か否かをチェックします。

アルゴリズムは下記の通りです。

  1. \(2 \leqq a \leqq n \ – \ 1\) を満たす整数 \(a\) を無作為に用意
  2. \(\gcd(a,n) \neq 1\) の場合、合成数であり、処理終了
  3. \(y = a^{n \ – \ 1} \bmod n\) を計算
  4. \(y \neq 1\) の場合、合成数であり、処理終了
  5. 処理終了(素数)
#include <iostream>
#include <ctime>
using namespace std;

// プロトタイプ宣言
int gcd( int a, int b );
long long powmod( long long b, long long e, long long m );

/*
    フェルマーテストによる素数判定
*/

// 引数に与えられた自然数の素数判定結果をリターン
// trial: 素数判定の試行回数

bool fermat( int n, int trial ) { 
    srand( ( unsigned int )time( NULL ) );
    
    if( n < 2 ) return false; // 2 未満は排除
    if( n == 2 ) return true; // 2 は素数
    
    // trial の回数だけ素数判定を試行
    for( int i = 0; i < trial; i++ ) {
        
        // [2, n-1] の乱数を生成
        int a = rand( ) % ( n - 2 ) + 2;
        // 最大公約数が 1 以外の場合は合成数
        if( gcd( a, n ) != 1 ) {
            return false;
        }
        // 判定式 y = a^(n-1) mod n の値が 1 以外の場合は合成数
        if( powmod( a, n - 1, n ) != 1 ) {
            return false;
        }
    }

    return true;
}

/*
    コマンドライン引数に与えられた自然数以下の素数を標準出力
*/

int main( int argc, char *argv[] ) {

    // 引数を忘れた場合の Segmentation fault 対策
    if( argc < 3 ) {
        cout << "Please input (N, trial)" << endl;
        exit( 1 );
    }

    // 文字列型の引数を整数型に変換
    int N = atoi( argv[ 1 ] );
    int trial = atoi( argv[ 2 ] );

    // 標準出力
    for( int n = 0; n <= N; n++ ) {
        if( fermat( n , trial ) ) {
            cout << n << " ";
        }
    }
    cout << endl;

    return 0;
}

/*
    最大公約数の算出
*/

int gcd( int a, int b ) {
    
    // gcd(a,b) = gcd(b,a mod b) の法則を利用
    while( b > 0 ) {
        int t = a % b;
        a = b;
        b = t;
    }

    return a;
}

/*
    冪剰余計算 : b^e mod m
*/

long long powmod( long long b, long long e, long long m ) {

    long long result = 1; // 結果

    // 0 乗の場合、結果は 1
    if( e == 0 ) return result;

    // 指数が 0 になるまで法を取りながら積を計算
    while( e > 0 ) {

        // 奇数の場合: 最下位ビットが 1 = 求める解の因数として利用される
        if( e & 1 ) {
            e--; // 偶数にする
            result = result * b % m; // 解の更新
        }

        // 偶数の場合: 最下位ビットが 0 = 求める解の因数として利用されない
        else {
            e >>= 1; // 右に 1 ビットシフト
            b = b * b % m; // 部分計算
        }
    }

    return result;
}

Windows と Mac における実行例です。

実行例(Windows)
実行例(Mac)

逆数の算出

\({e \cdot d} \bmod m = 1\) を満たす逆数 \(d\) を \((e,m)\) から算出します。

法をとる整数の逆数とは、掛けて \(1\) になる数をであり、\(d\) は \(e\) の逆数です。

逆数は「拡張ユーグリッド互除法」の応用により求めます。

この法則は、下記の等式を満たす \((x,y)\) を求める方法です。

$$ ax + by = \gcd(a,b)$$

ここで、

$${e \cdot d} \bmod m = 1$$

を満たすことは、

$$ex + my = 1 = \gcd(e,m)$$

を満たすことと同値であり、\(x = d\) です。

したがって、

$$ax + by = 1$$

を満たす \(x\) を求める拡張ユーグリッドの互除法における解法が必要です。

例題として、$$7x + 60y = 1$$ を満たす \((x,y)\) を 1 組求めます。

まず、下式を立てます。

\begin{eqnarray}
0 \cdot a + 1 \cdot b & = & b \\
1 \cdot a + 0 \cdot b & = & a
\end{eqnarray}

次に、初期値である \(a = 7\) および \(b = 60\) を代入します。

\begin{eqnarray}
0 \cdot a + 1 \cdot b & = & 60 \tag{1} \\
1 \cdot a + 0 \cdot b & = & 7 \tag{2}
\end{eqnarray}

このとき \(60 = 7 \times 8 + 4\) より、

$$\gcd(60,7) = \gcd(7,4) $$

\((1) \ – \ (2) \times 8 = 4\) であることから \((3)\) 式を得ます。

\begin{eqnarray}
1 \cdot a + 0 \cdot b & = & 7 \tag{2} \\
-8 \cdot a + 1 \cdot b &= & 4 \tag{3}
\end{eqnarray}

同様に、\(7 = 4 \times 1 + 3\) より、

$$\gcd(7,4) = \gcd(4,3)$$

\((2) \ – \ (3) \times 1 = 3\) であることから \((4)\) 式を得ます。

\begin{eqnarray}
-8 \cdot a + 1 \cdot b & = & 4 \tag{3} \\
\ 9 \cdot a \ – \ 1 \cdot b & = & 3 \tag{4}
\end{eqnarray}

\(4 = 3 \times 1 + 1\) より、

$$\gcd(4,3) = \gcd(3,1)$$

\((3) \ – \ (4) \times 1 = 1\) であることから \((5)\) 式を得ます。

\begin{eqnarray}
9 \cdot a \ – \ 1 \cdot b & = & 3 \tag{4} \\
-17 \cdot a + 2 \cdot b & = & 1 \tag{5}
\end{eqnarray}

このとき \((5)\) 式に注目して、

$$ a \cdot (-17) + b \cdot 2 = 1 $$

求める \((x, y)\) の1つが \((-17,2)\) であることが分かります。

ただし、RSA 暗号における秘密鍵 \(d\) の場合、正の整数であることが好ましいです。

下記の同値変形を利用し、\(x\) に \(b\) を足すことにより、正に調整します。

$$ax + by = 1 \ \Longleftrightarrow \ a \cdot (x+b) + b \cdot (y \ – \ a) = 1$$

ここでの場合、\(a \cdot (-17 \ + \ 60) + b \cdot (2 \ – \ 7) = 1\) より、

$$a \cdot 43 + b \cdot (-5) = 1$$

となります。

以上より、\(x = d = 43\) となります。

上記の「計算例」と同等のプロセスをプログラムで再現します。

#include <iostream>
using namespace std;

/*
    拡張ユークリッド互除法を応用した逆数の算出
*/

// ax + by = 1 を満たす (x,y) の算出
// RSA 暗号における関係式: ed + my = 1 | a=e, b=m, x=d
// d: RSA 暗号における秘密鍵

void exgcd( int a, int b, int *px, int *py ) {
    
    // 初期の関係式
    int x1 = 0, y1 = 1, r1 = b;
    int x2 = 1, y2 = 0, r2 = a;
    
    // 最終的な解
    int x, y;
    // 計算過程における商と剰余
    int qq, rr;
    // 計算過程において新たに立式される関係式の係数
    int xx, yy;
    
    while( true ) {
        // 商と剰余の計算
        qq = r1 / r2;
        rr = r1 % r2;
        
        // 新たな式の係数を計算
        xx = x1 - qq * x2;
        yy = y1 - qq * y2;
        // 余りが 0 のときの係数が求める解であるため処理終了
        if( rr == 0 ) {
            x = x2;
            y = y2;
            break;
        }
        // 関係式の更新
        x1 = x2; y1 = y2; r1 = r2;
        x2 = xx; y2 = yy; r2 = rr;
    }
    
    // x が 0 以下の場合は変換
    // ax + by = 1 のとき a(x+b) + b(y-a) = 1
    while( x <= 0 ) {
        x += b;
        y -= a;
    }
    // 引数が指定するアドレスに結果を格納
    *px = x;
    *py = y;
}

/*
    コマンドライン引数に与えられた自然数の最大公約数を標準出力
*/

int main( int argc, char *argv[] ) {

    // 引数を忘れた場合の Segmentation fault 対策
    if( argc < 3 ) {
        cout << "Please input (a,b)" << endl;
        exit( 1 );
    }

    // 文字列型の引数を整数型に変換
    int a = atoi( argv[ 1 ] );
    int b = atoi( argv[ 2 ] );

    // 結果格納先のアドレス
    int px, py;

    // 拡張ユークリッド互除法の実行
    exgcd( a, b, &px, &py );

    // 標準出力
    cout << a << "x + " << b << "y = 1 -> (x,y) = (" << px << "," << py << ")" << endl;

    return 0;
}

Windows と Mac における実行例です。

実行例(Windows)
実行例(Mac)

RSA 暗号のシミュレーション

RSA 暗号を用いた秘密通信の簡易シミュレーションを実装します。

簡単な模擬であり、商用暗号には程遠く、安全性や実用性は低いですが、データの流れをイメージしながら、暗号通信を模擬体験することができます。

プログラム

「RSA 暗号のコンポーネント」で紹介したモジュールを rsa.cpp にまとめました。

このファイルを利用することで、秘密通信のプログラムを実装します。

ヘッダファイルである rsa.hpp にてプロトタイプ宣言を行い、rsa.cpp に関数を定義します。

秘密通信のプログラムでは、rsa.hpp をインクルードして利用します。

rsa.hpp
#ifndef _RSA_HPP_
#define _RSA_HPP_

#include <iostream>
#include <ctime>
#include <vector>
using namespace std;

long long powmod( long long b, long long e, long long m ); // 冪剰余計算
int gcd( int a, int b ); // 最大公約数の算出
int lcm( int a, int b ); // 最小公倍数の算出
bool simple( int n ); // 単純法による素数判定
bool rabin( int n ); // ラビン法による素数判定
vector<bool> eratosthenes( int n ); // エラトステネスの篩による素数判定
bool fermat( int n, int trial ); // フェルマーテストによる素数判定
int exgcd( int a, int b ); // 拡張ユークリッド互除法を応用した逆数の算出

#endif // _RSA_HPP_
rsa.cpp
#include <iostream>
#include <ctime>
#include <vector>
#include "rsa.hpp"
using namespace std;

/*
    冪剰余計算 : b^e mod m
*/

long long powmod( long long b, long long e, long long m ) {

    long long result = 1; // 結果

    // 0 乗の場合、結果は 1
    if( e == 0 ) return result;

    // 指数が 0 になるまで法を取りながら積を計算
    while( e > 0 ) {

        // 奇数の場合: 最下位ビットが 1 = 求める解の因数として利用される
        if( e & 1 ) {
            e--; // 偶数にする
            result = result * b % m; // 解の更新
        }

        // 偶数の場合: 最下位ビットが 0 = 求める解の因数として利用されない
        else {
            e >>= 1; // 右に 1 ビットシフト
            b = b * b % m; // 部分計算
        }
    }

    return result;
}

/*
    最大公約数の算出
*/

int gcd( int a, int b ) {
    
    // gcd(a,b) = gcd(b,a mod b) の法則を利用
    while( b > 0 ) {
        int t = a % b;
        a = b;
        b = t;
    }
    return a;
}

/*
    最小公倍数の算出
*/

int lcm( int a, int b ) {
    
    // a * b = gcd(a,b) * lcm(a,b) の法則を利用
    return ( a * b ) / gcd( a, b );
}

/*
    単純法による素数判定
*/

// 引数に与えられた自然数の素数判定結果をリターン

bool simple( int n ) {
    
    if( n < 2 ) return false; // 2 未満は排除
    if( n == 2 ) return true; // 2 は素数
    if( n % 2 == 0 ) return false; // 2 以外の偶数は合成数(除算による偶数判定)
    
    // 3 以上の奇数でチェック
    for( int k = 3; k * k <= n; k += 2 ) { 
        if( n % k == 0 ) {
            return false; // 割り切れる場合は合成数
        }
    }
    return true; // 素数
}

/*
    エラトステネスの篩による素数判定
*/

// 引数に与えられた自然数以下の素数判定結果の配列をリターン

vector eratosthenes( int n ) {
    
    // 配列のインデックスに自然数値が対応
    vector<bool> result( n + 1, true );
    
    result[ 0 ] = false; // 0 は非素数
    result[ 1 ] = false; // 1 は非素数

    for ( int k = 2; k <= n; k++ ) {
        
        // 合成数であることが判明している場合はスキップ
        if ( !result[ k ] ) continue;

        // k は素数であるが、k の倍数は合成数
        for ( int mk = 2 * k; mk <= n; mk += k ) {
            result[ mk ] = false;
        }
    }
    return result;
}

/*
    ミラーラビン法による素数判定
*/

// 引数に与えられた自然数の素数判定結果をリターン

bool rabin( int n ) {
    
    srand( ( unsigned int )time( NULL ) );

    if( n < 2 ) return false; // 2 未満は非素数
    if( n == 2 ) return true; // 2 は素数
    if( !( n & 1 ) ) return false; // 2 以外の偶数は合成数(論理演算による偶数判定)

    /* n-1 = (2^k)*m を満たす (k,m) を算出 */

    // この時点で n は奇数であるため、n-1 は偶数であり、m は奇数

    int k = 0;
    int m = n - 1;

    while( !( m & 1 ) ) {
        m >>= 1; // 右に 1 ビットシフト = m を 1/2
        k++;
    }

    /* [2, n-1] を満たす乱数の生成 */
    
    int a = rand( ) % ( n - 2 ) + 2;

    /* 判定式 y = a^m mod n に基づくチェック */ 
    
    long long y = powmod( a, m, n );

    if( y == 1 || y == n - 1 ) {
        return true; // 素数
    }

    /* 判定式 y = y^2 mod n (0 <= i <= k-1) に基づくチェック */

    int i = 0;
    while( i < k ) {
        y = powmod( y, 2, n );
        if( y == n - 1 ) return true; // 素数
        if( y == 1 ) return false; // 合成数
        i++;
    }

    /* 判定式に基づくチェック終了 */

    return false; // 合成数
}

/*
    フェルマーテストによる素数判定
*/

// 引数に与えられた自然数の素数判定結果をリターン
// trial: 素数判定の試行回数

bool fermat( int n, int trial ) { 

    srand( ( unsigned int )time( NULL ) );
    
    if( n < 2 ) return false; // 2 未満は排除
    if( n == 2 ) return true; // 2 は素数
    
    // trial の回数だけ素数判定を試行
    for( int i = 0; i < trial; i++ ) {
        
        // [2, n-1] の乱数を生成
        int a = rand( ) % ( n - 2 ) + 2;

        // 最大公約数が 1 以外の場合は合成数
        if( gcd( a, n ) != 1 ) {
            return false;
        }

        // 判定式 y = a^(n-1) mod n の値が 1 以外の場合は合成数
        if( powmod( a, n - 1, n ) != 1 ) {
            return false;
        }
    }
    return true;
}

/*
    拡張ユークリッド互除法を応用した逆数の算出
*/

// ax + by = 1 を満たす (x,y) を算出 & x をリターン
// RSA 暗号における関係式: ed + my = 1 | a=e, b=m, x=d
// d: RSA 暗号における秘密鍵

int exgcd( int a, int b ) {
    
    // 初期の関係式
    int x1 = 0, y1 = 1, r1 = b;
    int x2 = 1, y2 = 0, r2 = a;
    
    // 最終的な解
    int x;

    // 計算過程における商と剰余
    int qq, rr;

    // 計算過程において新たに立式される関係式の係数
    int xx, yy;
    
    while( true ) {

        // 商と剰余の計算
        qq = r1 / r2;
        rr = r1 % r2;
        
        // 新たな式の係数を計算
        xx = x1 - qq * x2;
        yy = y1 - qq * y2;

        // 余りが 0 のときの係数が求める解であるため処理終了
        if( rr == 0 ) {
            x = x2;
            break;
        }

        // 関係式の更新
        x1 = x2; y1 = y2; r1 = r2;
        x2 = xx; y2 = yy; r2 = rr;
    }
    
    // x が 0 以下の場合は変換
    // ax + by = 1 のとき a(x+b) + b(y-a) = 1
    while( x <= 0 ) x += b;

    return x;
}

鍵の作成

共通鍵 \(n\)、暗号化鍵 \(e\)、復号化鍵 \(d\) を作成し、コマンドラインに標準出力します。

コマンドライン引数に指定する自然数 \(N\) 以下の素数を利用して鍵を作成します。

ここでは、素数判定に単純法を用いました。

#include <iostream>
#include <vector>
#include "rsa.hpp"
using namespace std;

/*
	RSA 暗号で利用する鍵の作成
*/

int main( int argc, char *argv[] ) {

	// 引数を忘れた場合の Segmentation fault 対策
	if( argc < 2 ) {
		cout << "Please input N" << endl;
		exit( 1 );
	}
	
	// コマンドライン引数に与えられた整数 N 以下の素数を利用
	int N = atoi( argv[ 1 ] );

	// 乱数の種に現在時刻を設定
	srand( ( unsigned int )time( NULL ) );

	// 素数リスト
	vector<int> primeNum;
	int size = 0;

	// 単純法による素数判定により素数リストを作成
	for( int n = 0; n <= N; n++ ) {
		if( simple( n ) ) {
			primeNum.push_back( n );
		}
	}
	size = primeNum.size( );
	
	// 異なる素数 p, q を用意
	int p, q;
	p = primeNum[ rand( ) % size ];
	do {
		q = primeNum[ rand( ) % size ];
	} while( p == q );
	
	// 公開鍵(1)の作成
	int n = p * q;

	// 最小公倍数の算出
	int m = lcm( p - 1, q - 1 );

	// 公開鍵(2)
	int e = m; // 初期値に m を利用
	if( !( e & 1 ) ) e++; // 奇数に調整

	// 秘密鍵
	int d;
	do {
		// 公開鍵(2)の作成
		e += 2;
		while( gcd( e, m ) != 1 ) e += 2; // m と e は互いに素
		// 秘密鍵の作成
		d = exgcd( e, m );
	} while( e == d );

	// 鍵の標準出力
	cout << "e: " << e << endl;
	cout << "d: " << d << endl;
	cout << "n: " << n << endl;
	
	return 0;
}

暗号化

暗号化鍵 \(e\) と、共通鍵 \(n\) を用いて、任意のメッセージ \(M\)(平文)を暗号化します。

暗号文 \(C\) は標準出力されます。

#include <iostream>
#include "rsa.hpp"
using namespace std;

/*
	暗号化
*/

int main( void ) {
	int M, e, n;
	cout << "M: "; cin >> M;
	cout << "e: "; cin >> e;
	cout << "n: "; cin >> n;
	cout << M << " ^ " << e << " mod " << n << " = C = " << powmod( M, e, n ) << endl;
	return 0;
}

復号化

復号化鍵 \(d\)と、共通鍵 \(n\) を用いて、暗号文 \(C\) を復号化します。

復号化されたメッセージ \(M\) (平文)は標準出力されます。

#include <iostream>
#include "rsa.hpp"
using namespace std;

/*
	復号化
*/

int main( void ) {
	int C, d, n;
	cout << "C: "; cin >> C;
	cout << "d: "; cin >> d;
	cout << "n: "; cin >> n;
	cout << C << " ^ " << d << " mod " << n << " = M = " << powmod( C, d, n ) << endl;
	return 0;
}

実行

コマンドラインにて、受信者と送信者の一人二役により、シミュレーションを行います。

ここでは、Windows のコマンドプロンプトを用いて実行します。

Mac のターミナルで実行した場合も同様の結果を得ることができます。

鍵の作成(受信者)

makekey.cpp を実行します。

初回はコンパイルが必要です。

ここでは、\(1000\) 以下の自然数に含まれる素数を利用して鍵を作成します。

実行例(Windows)
メッセージの暗号化(送信者)
  1. encryption.cpp の実行(初回は要コンパイル)
  2. 任意のメッセージ \(M\)(自然数)を入力
  3. STEP.1 にて標準出力された \((e,n)\) を入力
  4. 暗号文 \(C\) の標準出力を確認

ここでは、メッセージ \(M\) を「\(24738\)」として暗号化します。

実行例(Windows)
暗号文の復号化(受信者)
  1. decryption.cpp の実行(初回は要コンパイル)
  2. 暗号文 (C) を入力
  3. STEP.1 にて標準出力された ((d,n)) を入力
  4. 復号化されたメッセージ(平文)の標準出力を確認
実行例(Windows)

暗号化したメッセージ \(M\) の「\(24738\)」が復号化されていることが分かります。

メッセージ \(M\) を「\(25892\)」としたうえで暗号化し、正しく復号化されていることが分かります。

実行例(Mac)

秘密通信のシミュレーションは以上です。

おすすめの参考書

本投稿で割愛した数学的知識や実装上の注意点など、詳細情報を学習できるおすすめの参考書を紹介します。

学生時代から現在まで利用している書籍です。

暗号技術のすべて

学生時代に利用し、とても重宝した参考書の 1 つです。

講義の補足や、論文を読むうえでの事前知識の習得のために活用しました。

数学的な基礎知識や基本技術などについて、丁寧な説明が積み重ねられているため、初学者でもスムーズに学ぶことができます。

辞書的用途としても手元に置いておくと心強い 1 冊です。

暗号技術のすべて

著者 : IPUSIRON / 出版社 : 翔泳社

暗号技術入門 第3版

読み物として、暗号技術を体系的に学ぶことができます。

各種暗号の仕組みや具体的な活用シーンなど、基本知識や全体像を掴むことができます。

数学的な事前知識がなくとも、スラスラ読むことができます。

本格的な学習を始める前の 1 冊として最適です。

暗号技術入門

著者 : 結城 浩 / 出版社 : SB クリエイティブ

暗号から学ぶ代数学

暗号技術を題材に代数学を学ぶことができる一石二鳥の参考書です。

学生時代に出会いたかった 1 冊です。

ユーグリッドの互除法やフェルマーの小定理などの基本的な定理をはじめ、代数学の基礎である「群」「体」「環」や、代表的な暗号技術について学ぶことができます。

暗号から学ぶ代数学

著者 : 結城 浩 / 出版社 : SB クリエイティブ

実行環境

Windows

MinGW-w64 を用いた C/C++ の実行環境にて検証を行いました。

構築方法は下記を参照ください。

プログラミング初心者向け!C/C++ のシンプルな開発環境を構築する

Mac

Apple Clang を用いた C/C++ の実行環境にて検証を行いました。

Clang は、デフォルトでインストールされています。

]]>
大学受験生必見!偏差値を爆上げするオススメ参考書【英語編】 https://cham.space/refenglish/ Tue, 07 Jun 2022 10:00:03 +0000 https://cham.space/?p=4864

大学受験における 3 年間の浪人生活にて、200 冊を超える様々な参考書を通じて勉強した cham が、英語の得点アップに直結し、偏差値を 20 以上も引き上げたオススメの参考書を紹介します。 プライベートにおいて、大学 ... ]]>

大学受験における 3 年間の浪人生活にて、200 冊を超える様々な参考書を通じて勉強した cham が、英語の得点アップに直結し、偏差値を 20 以上も引き上げたオススメの参考書を紹介します。

プライベートにおいて、大学受験生のメンターを務めていますが、実際に学生に利用していただき、飛躍的な成績向上に繋がった書籍を集めました。

予備校に通わずとも、参考書のみで十分に成績向上を図ることができます。

勉強方法や、cham の浪人生活の詳細は、下記を参照ください。

受験生必見!3 浪経験に基づく大学受験の攻略法

システム英単語

大学入試や各種資格試験で出題された 4 億語の DB を用いた分析結果がまとめられた英単語帳です。

単独の英単語ではなく、頻繁に使われる「ミニマル・フレーズ」の形で覚えることにより、試験に出る表現と合わせて効率的に記憶することができます。

また、複数の意味を持つ単語の場合、頻出順に並べられているため、抑えるべき範囲を絞り、無駄なく覚えることができます。

システム英単語

著者 : 霜 康司 / 出版社 : 駿台文庫

評価
難易度
 (3)
解説の丁寧さ
 (4)
網羅性
 (4)
実戦力
 (4)
短期習得
 (3)
総合評価
 (4)

英単語ターゲット 1900

共通テストから国公立2次試験・難関私大レベルまでをカバーする 1900 単語が「出る順」にまとめられた英単語帳です。

入試で問われる中心的な意味を覚え、文脈の中で他の意味を推測するという「一語一義」の主義により、最小の努力で最大限の効果が期待できるよう設計されています。

また、100 語単位ずつ区切られているため、リズムよく計画的に学習することができます。

英単語ターゲット 1900

著者 : ターゲット編集部 / 出版社 : 旺文社

評価
難易度
 (3)
解説の丁寧さ
 (3)
網羅性
 (4)
実戦力
 (4)
短期習得
 (3)
総合評価
 (4)

DUO 3.0

重要単語 1600 語と熟語 1000 語を 560 本の例文に重複なく凝縮した単語帳です。

米国の大学教授 3 名をはじめ、ネイティブ 15 名の監修のもと作成された「暗記する価値のある英文」がまとめられています。

付属 CD の音源を用いることで、560 例文を約 1 時間で総復習することができます。

リスニングの練習も兼ねながら、本場の英会話で用いられる実戦的なフレーズを自然と身に付けることができます。

全体の約 6 割は、「システム英単語」や「ターゲット 1900」に掲載されている単語であり、難易度がやや高い単語帳ですが、将来的に英語を活用したいと考える受験生には一石二鳥以上のメリットを与えてくれます。

cham は、留学を 3 度経験していますが、この単語帳をやり込んだことにより、海外で不自由なく日常生活や講義を受けることができました。

DUO 3.0

著者 : 鈴木 陽一 / 出版社 : アイシーピー

評価
難易度
 (4)
解説の丁寧さ
 (5)
網羅性
 (4.5)
実戦力
 (4.5)
短期習得
 (3)
総合評価
 (4.5)

関正生の英文法ポラリス

スタディサプリで「神授業」を展開し、圧倒的人気を誇る「関正生」先生による監修のもと、全国の入試問題から徹底的に選び抜いた文法・語法問題がまとめられています。

厳選した頻出問題をベースに、徹底的な解説がなされており、共通テストから難関国立大学までの英語力を効率よく身に付けることができます。

文法問題をはじめ、長文読解にまで応用することができる知識やテクニックを短期間で学び、得点力の底上げを図ることができます。

関正生の英文法ポラリス [1 標準レベル]

著者 : 関 正生 / 出版社 : KADOKAWA

関正生の英文法ポラリス [2 応用レベル]

著者 : 関 正生 / 出版社 : KADOKAWA

関正生の英文法ポラリス [3 発展レベル]

著者 : 関 正生 / 出版社 : KADOKAWA

評価
難易度
 (3.5)
解説の丁寧さ
 (5)
網羅性
 (4)
実戦力
 (4)
短期習得
 (3)
総合評価
 (4)

関正生の英文法ファイナル演習ポラリス

入試直前の総仕上げや実力アップに最適な演習書です。

実戦形式の 30 ユニットからなる実際の入試問題を大問ごとに演習し、本番力を養うことができます。

ランダム形式で問題を解くことができるため、弱点を自己分析し、苦手分野を克服することもできます。

関正生の英文法ファイナル演習ポラリス [1 標準レベル]

著者 : 関 正生 / 出版社 : KADOKAWA

関正生の英文法ファイナル演習ポラリス [2 応用レベル]

著者 : 関 正生 / 出版社 : KADOKAWA

評価
難易度
 (3)
解説の丁寧さ
 (3)
網羅性
 (3)
実戦力
 (3)
短期習得
 (3)
総合評価
 (3)

肘井学の読解のための英文法が面白いほどわかる本

「どうしたら英文を読めるようになるか?」の問に答える読解のための英文法を学ぶ問題集です。

基本から難関大学レベルまでの厳選された頻出テーマを通じ、英文解釈のパターンを身に付けます。

一文を見て素早く構造を掴み、正確な意味を理解するトレーニングを積むことにより、読解力は養われ、どんな長文もスラスラ読めるようになります。

肘井学の読解のための英文法が面白いほどわかる本

著者 : 肘井 学 / 出版社 : KADOKAWA

肘井学の読解のための英文法が面白いほどわかる本 難関大編

著者 : 肘井 学 / 出版社 : KADOKAWA

評価
難易度
 (3)
解説の丁寧さ
 (5)
網羅性
 (3)
実戦力
 (4)
短期習得
 (3)
総合評価
 (4)

関正生の英語長文ポラリス

大学入試長文にて頻出かつ今後も出題される可能性が高いテーマが厳選された問題集です。

「なぜこの長文を読むと良いのか?」にズバリと答えた解説を通じ、納得感を得ながら読解テクニックを学ぶことができます。

単語帳がフォローしていない「長文にこそ頻出」の旬なキーワードも豊富であり、他の受験生と点差を付けることもできます。

関正生の英語長文ポラリス(1 標準レベル)

著者 : 関 正生 / 出版社 : KADOKAWA

関正生の英語長文ポラリス(2 応用レベル)

著者 : 関 正生 / 出版社 : KADOKAWA

関正生の英語長文ポラリス(3 発展レベル)

著者 : 関 正生 / 出版社 : KADOKAWA

評価
難易度
 (3)
解説の丁寧さ
 (5)
網羅性
 (4)
実戦力
 (3.5)
短期習得
 (3)
総合評価
 (4)

英語長文ハイパートレーニング

長文読解力の定着に最適な英文を通じ、速読・音読トレーニングを行うことができる問題集です。

疑問が残らない徹底的な解説により、精読力も身に付けることができます。

リスニング対策も含め、長文読解に役立つフレーズを効率良く学ぶこともできます。

英語長文ハイパートレーニング レベル1 超基礎編

著者 : 安河内 哲也 / 出版社 : 桐原書店

英語長文ハイパートレーニング レベル2 標準編

著者 : 安河内 哲也 / 出版社 : 桐原書店

英語長文ハイパートレーニング レベル3 難関編

著者 : 安河内 哲也 / 出版社 : 桐原書店

評価
難易度
 (3)
解説の丁寧さ
 (4)
網羅性
 (3)
実戦力
 (3.5)
短期習得
 (3.5)
総合評価
 (3.5)

やっておきたい英語長文

大学入試の過去問をベースに、一度は読んでおきたい英語長文の良問が豊富に掲載された問題集です。

難易度を 300 から 1000 までステップさせながら、読解力を無理なく身に付けることができます。

程よい難易度で、長文読解の演習をこなしたい方におすすめです。

やっておきたい英語長文 300

著者 : 杉山 俊一 / 出版社 : 河合出版

やっておきたい英語長文 500

著者 : 杉山 俊一 / 出版社 : 河合出版

やっておきたい英語長文 700

著者 : 杉山 俊一 / 出版社 : 河合出版

やっておきたい英語長文 1000

著者 : 杉山 俊一 / 出版社 : 河合出版

評価
難易度
 (3.5)
解説の丁寧さ
 (3)
網羅性
 (3)
実戦力
 (3)
短期習得
 (3.5)
総合評価
 (3)

肘井学の作文のための英文法が面白いほどわかる本

ゼロから難関大学対策まで、英作文に必要な重要ルールを体系的に身に付けることができる参考書です。

厳選された大学入試の過去問を通じ、英作文をスラスラ書くためのフレームを学ぶことができます。

音声を聞き、日本語から英語への変換を繰り返すことで、定型表現が自然と身に付き、口に出すことで発信力を養えるなど、口頭英作文により「英作文脳」を作っていきます。

大学受験のみならず、スピーキング対策や日常会話の練習にも適しています。

肘井学の作文のための英文法が面白いほどわかる本

著者 : 肘井 学 / 出版社 : KADOKAWA

評価
難易度
 (3.5)
解説の丁寧さ
 (4.5)
網羅性
 (3.5)
実戦力
 (4)
短期習得
 (3)
総合評価
 (4)

英作文ハイパートレーニング

「和文英訳編」は、英訳の基礎に特化した名著です。

躓きやすいポイントが徹底的に解説されており、ステップを踏みながらスムーズに意訳テクニックを身に付けることができます。

ページ数が少ないため、短期的に学習できるうえ、文法定着をはじめ、英文の素早い構造理解、スピーキング対策なども併せて行うことができます。

英作文ハイパートレーニング 和文英訳

著者 : 大矢 復 / 出版社 : 桐原書店

評価
難易度
 (3)
解説の丁寧さ
 (4)
網羅性
 (2)
実戦力
 (3)
短期習得
 (3.5)
総合評価
 (3.5)


「自由英作文編」は、英作文の構成手順や論展開、思考方法の基礎を学ぶことができる参考書です。

点数に直結する答案を短時間でまとめるテクニックやコツを身に付け、得点源にすることができます。

英作文ハイパートレーニング 自由英作文編

著者 : 大矢 復 / 出版社 : 桐原書店

評価
難易度
 (3)
解説の丁寧さ
 (4)
網羅性
 (3)
実戦力
 (3.5)
短期習得
 (3)
総合評価
 (3.5)


「最難関大への英作文 ハイパートレーニング」は、ゼロから難関大学の英作文対策を行うことができる参考書です。

基本的な英作文テクニックをはじめ、和文英訳の過去問を通じ、文法の運用力と意訳の実践力を磨くことができます。

最難関大で出題される最新の自由英作文問題におけるタイプ別攻略法と実践的な書き方を学びながら、表現力や答案力を身に付けることもできます。

最難関大への英作文 ハイパートレーニング

著者 : 大矢 復 / 出版社 : 桐原書店

評価
難易度
 (4)
解説の丁寧さ
 (4)
網羅性
 (3)
実戦力
 (3.5)
短期習得
 (3)
総合評価
 (4)

絶対できる英語リスニング

共通テストから個別試験まで、様々なタイプのリスニング問題を完全攻略することができる参考書です。

ディステーションやシャドーイングを通じ、頻出表現や先読みの技術、メモの取り方など、実戦的テクニックをマスターすることができます。

何となく問題を解いている方や、共通テストで 5 割しか取れない方におすすめです。

絶対できる英語リスニング

著者 : 肘井 学 / 出版社 : 教学社

評価
難易度
 (3)
解説の丁寧さ
 (5)
網羅性
 (4)
実戦力
 (4)
短期習得
 (3)
総合評価
 (4.5)

1カ月で攻略! 大学入学共通テスト英語リスニング

共通テストのリスニング対策を、20 日間で完成させる参考書です。

徹底分析に基づき編み出された「聴く型」と「解く型」のテクニックを身に付けることで、安定的な得点力を養います。

短期間で効率良く点数を稼ぐノウハウを学びたい方におすすめです。

1カ月で攻略! 大学入学共通テスト英語リスニング

著者 : 岡﨑 修平 / 出版社 : アルク

評価
難易度
 (3)
解説の丁寧さ
 (3.5)
網羅性
 (3)
実戦力
 (4.5)
短期習得
 (4)
総合評価
 (4)
]]>
大学受験生必見!偏差値を爆上げするオススメ参考書【物理編】 https://cham.space/refphysics/ Tue, 31 May 2022 12:00:35 +0000 https://cham.space/?p=4793

大学受験における 3 年間の浪人生活にて、200 冊を超える様々な参考書を通じて勉強した cham が、物理の得点アップに直結し、偏差値を 20 以上も引き上げたオススメの参考書を紹介します。 プライベートにおいて、大学 ... ]]>

大学受験における 3 年間の浪人生活にて、200 冊を超える様々な参考書を通じて勉強した cham が、物理の得点アップに直結し、偏差値を 20 以上も引き上げたオススメの参考書を紹介します。

プライベートにおいて、大学受験生のメンターを務めていますが、実際に学生に利用していただき、飛躍的な成績向上に繋がった書籍を集めました。

予備校に通わずとも、参考書のみで十分に成績向上を図ることができます。

勉強方法や、cham の浪人生活の詳細は、下記を参照ください。

受験生必見!3 浪経験に基づく大学受験の攻略法

漆原晃の 物理基礎・物理が面白いほどわかる本

ストーリー形式の講義と練習問題で構成された参考書です。

豊富なイラストを用いた解説により、問題のテーマとなる物理現象を具体的にイメージしながら、覚えるべき重要事項を体系的に学ぶことができます。

高校物理の基礎に不安があり、短期間で総復習をしたい受験生におすすめです。

大学入試 漆原晃の物理基礎・物理[力学・熱力学編]が面白いほどわかる本

著者 : 漆原 晃 / 出版社 : KADOKAWA & 中経出版

大学入試 漆原晃の物理基礎・物理[波動・原子編]が面白いほどわかる本

著者 : 漆原 晃 / 出版社 : KADOKAWA & 中経出版

大学入試 漆原晃の物理基礎・物理[電磁気編]が面白いほどわかる本

著者 : 漆原 晃 / 出版社 : KADOKAWA & 中経出版

評価
難易度
 (3)
解説の丁寧さ
 (5)
網羅性
 (4)
実戦力
 (3)
短期習得
 (3)
総合評価
 (4)

物理のエッセンス

受験物理における様々な問題の骨格となる基礎問題が、過不足なくまとめられています。

教科書から、もう一歩踏み込んだ内容を扱っており、応用力を学ぶことができます。

古い本ですが、今なお、有名で人気のある名著です。

物理のエッセンス 力学・波動

著者 : 浜島 清利 / 出版社 : 河合出版

物理のエッセンス 熱・電磁気・原子

著者 : 浜島 清利 / 出版社 : 河合出版

評価
難易度
 (3)
解説の丁寧さ
 (3.5)
網羅性
 (3)
実戦力
 (3)
短期習得
 (3)
総合評価
 (3.5)

良問の風

標準レベルの典型的な問題がまとめられています。

基本問題をはじめ、応用にも触れることができるなど、程よい難易度の演習ができます。

「物理のエッセンス」で基礎を学んだ後、理解度を確認するのに最適です。

良問の風 物理頻出・標準入試問題集

著者 : 浜島 清利 / 出版社 : 河合出版

評価
難易度
 (3)
解説の丁寧さ
 (3)
網羅性
 (3)
実戦力
 (3)
短期習得
 (3)
総合評価
 (3)

漆原の物理(物理基礎・物理)明快解法講座

入試問題の徹底分析をもとに、頻出問題が厳選され、典型パターンの解法が丁寧に解説されています。

あらゆる問題に対応するノウハウが凝縮されており、得点力に直結する実用的なテクニックを学ぶことができます。

漆原の物理(物理基礎・物理)明快解法講座

著者 : 漆原 晃 / 出版社 : 旺文社

評価
難易度
 (3)
解説の丁寧さ
 (4)
網羅性
 (3.5)
実戦力
 (3.5)
短期習得
 (3)
総合評価
 (3.5)

重要問題集

大学入試の過去問から良問が厳選された問題集です。

標準レベルから難関大学対策までの問題がまとめられており、幅広い受験生を対象としています。

演習量をこなしたい受験生に適しています。

定理や重要事項が整理された小冊子が付録されており、試験直前などの体系的な確認に役立ちます。

実戦 物理重要問題集 物理基礎・物理

著者 : 数研出版編集部 / 出版社 : 数研出版

評価
難易度
 (3)
解説の丁寧さ
 (3)
網羅性
 (3.5)
実戦力
 (3.5)
短期習得
 (3)
総合評価
 (3.5)

基礎問題精講

国立大学や私立大学の個別試験が徹底的に分析され、必ず抑えておくべき頻出問題が、無駄なくまとめられています。

共通テストから、中堅大学の個別試験まで対策することができます。

網羅系問題集よりも問題数が少なく、短期間で要所を抑えたり、反復演習をしたりする場合に最適です。

物理[物理基礎・物理] 基礎問題精講

著者 : 大川 保博 / 出版社 : 旺文社

評価
難易度
 (3)
解説の丁寧さ
 (3)
網羅性
 (3.5)
実戦力
 (3.5)
短期習得
 (3.5)
総合評価
 (3.5)

ゴールデンルート

最小限の問題数で受験化学の要点を身に付けるために、頻出問題の中から必ず抑えるべき良問が厳選された効率重視の問題集です。

短期間で復習したり、反復演習をしたりする場合に適しています。

また、手早く入試問題の要点を掴みたい受験生にもおすすめです。

ゴールデンルート 物理[物理基礎・物理] 標準編

著者 : 佐々木 哲 / 出版社 : KADOKAWA

評価
難易度
 (3)
解説の丁寧さ
 (3.5)
網羅性
 (3)
実戦力
 (3.5)
短期習得
 (4)
総合評価
 (3.5)

物理の解法フレーム

問題の読み解き方や考え方、あらゆる問題に対応する解法手順を学ぶことができます。

短い勉強時間で物理を得点源にするテクニックを学ぶことができます。

授業や演習問題は理解できるにも関わらず、本番の試験において、傾向が少し変わるだけで解けなくなってしまう受験生におすすめです。

物理の解法フレーム [力学・熱力学編]

著者 : 笠原邦彦 / 出版社 : かんき出版

物理の解法フレーム [電磁気・波動・原子物理編]

著者 : 笠原邦彦 / 出版社 : かんき出版

評価
難易度
 (3)
解説の丁寧さ
 (3.5)
網羅性
 (2)
実戦力
 (4)
短期習得
 (4)
総合評価
 (4)

名問の森

難関大学において頻繁に出題される標準問題がまとめられています。

難易度はやや高いですが、良問が厳選されており、問題数が少なく、短期間でハイレベル問題における定石の解法を抑えたい場合に最適です。

このレベルの問題がスムーズに解ける学力が備われば、安定した成績をキープできるようになります。

名問の森物理 力学・熱・波動 I

著者 : 浜島 清利 / 出版社 : 河合出版

名問の森物理 波動 II・電磁気・原子

著者 : 浜島 清利 / 出版社 : 河合出版

評価
難易度
 (4)
解説の丁寧さ
 (3)
網羅性
 (3)
実戦力
 (4)
短期習得
 (3.5)
総合評価
 (4)

難問題の系統とその解き方

受験物理において、昔から定評があり、最も難易度が高い参考書の 1 冊です。

物理現象の根本的な理解を問う良問がまとめられており、公式の応用に留まらず、思考力と底力を養成することができます。

最難関大学を目指す受験生を対象としていますが、例題に関しては、必ず抑えておくべき基本事項を扱っており、本質の理解を伴う演習を行うことができます。

難問題の系統とその解き方 物理 力学・熱・波動

著者 : 服部 嗣雄 / 出版社 : ニュートンプレス

難問題の系統とその解き方 物理 電磁気・原子

著者 : 服部 嗣雄 / 出版社 : ニュートンプレス

評価
難易度
 (5)
解説の丁寧さ
 (2)
網羅性
 (3)
実戦力
 (4)
短期習得
 (2)
総合評価
 (2.5)

標準問題精講

受験物理において、最も難易度が高い参考書の 1 冊です。

複雑な計算や深い思考力を必要とする良問が集められています。

解説がとても丁寧であるため、問題が解けない場合も、解答を読むことで十分勉強になります。

最難関大学を目指す学生が、赤本と並行して取り組むと効果的です。

物理[物理基礎・物理] 標準問題精講

著者 : 中川 雅夫 & 為近 和彦 / 出版社 : 旺文社

評価
難易度
 (5)
解説の丁寧さ
 (4)
網羅性
 (3)
実戦力
 (4)
短期習得
 (2)
総合評価
 (3)
]]>
大学受験生必見!偏差値を爆上げするオススメ参考書【化学編】 https://cham.space/refscience/ Sun, 29 May 2022 00:00:32 +0000 https://cham.space/?p=4722

大学受験における 3 年間の浪人生活にて、200 冊を超える様々な参考書を通じて勉強した cham が、化学の得点アップに直結し、偏差値を 20 以上も引き上げたオススメの参考書を紹介します。 プライベートにおいて、大学 ... ]]>

大学受験における 3 年間の浪人生活にて、200 冊を超える様々な参考書を通じて勉強した cham が、化学の得点アップに直結し、偏差値を 20 以上も引き上げたオススメの参考書を紹介します。

プライベートにおいて、大学受験生のメンターを務めていますが、実際に学生に利用していただき、飛躍的な成績向上に繋がった書籍を集めました。

予備校に通わずとも、参考書のみで十分に成績向上を図ることができます。

勉強方法や、cham の浪人生活の詳細は、下記を参照ください。

受験生必見!3 浪経験に基づく大学受験の攻略法

大学受験 Do シリーズ

試験で問われる要点や、覚えておくべき重要事項が、体系的にまとめられている参考書です。

別冊の「入試で使える最重要 Point 総整理」は、試験直前のポイント確認にとても重宝します。

高校化学の基礎に不安があり、改めて情報整理を行いたい受験生におすすめです。

大学受験 Do シリーズ 鎌田の理論化学の講義

著者 : 鎌田 真彰 / 出版社 : 旺文社

大学受験 Do シリーズ 福間の無機化学の講義

著者 : 福間 智人 / 出版社 : 旺文社

大学受験 Do シリーズ 鎌田の有機化学の講義

著者 : 鎌田 真彰 / 出版社 : 旺文社

評価
難易度
 (3)
解説の丁寧さ
 (4)
網羅性
 (4)
実戦力
 (3)
短期習得
 (3)
総合評価
 (4)

基礎問題精講

入試で頻出の標準的な問題の解法が、丁寧に説明されています。

抑えておくべき良問が厳選され、問題数が少ないため、短期間で要所を抑えたい場合や反復演習を行う場合に最適です。

化学(化学基礎・化学)基礎問題精講

著者 : 鎌田 真彰 & 橋爪 健作 / 出版社 : 旺文社

評価
難易度
 (3)
解説の丁寧さ
 (4)
網羅性
 (3)
実戦力
 (3)
短期習得
 (3)
総合評価
 (3)

化学の新標準演習

基礎の確認から、標準的な頻出問題の学習ができる問題集です。

解説が非常に丁寧で、細かな疑問を解消してくれるため、無理なくスムーズに学ぶことができます。

大学入学共通テスト・理系大学受験 化学の新標準演習

著者 : 卜部 吉庸 / 出版社 : 三省堂

評価
難易度
 (3)
解説の丁寧さ
 (4)
網羅性
 (3.5)
実戦力
 (3)
短期習得
 (3.5)
総合評価
 (4)

大学入試分野別マスターノート

必ず押さえておくべき頻出問題や、応用が利く汎用的な問題が厳選された問題集です。

分野別に分かれているため、苦手意識のあるテーマに重点を置き、短期間で学習することもできます。

大学入試分野別マスターノート 理論化学(化学基礎・化学)超頻出98題

著者 : 吉田隆弘 / 出版社 : 旺文社

大学入試分野別マスターノート 無機化学(化学基礎・化学)超頻出37題

著者 : 中道 淳一 / 出版社 : 旺文社

大学入試分野別マスターノート 有機化学(化学基礎・化学)超頻出76題

著者 : 吉田隆弘 / 出版社 : 旺文社

評価
難易度
 (3)
解説の丁寧さ
 (3.5)
網羅性
 (3)
実戦力
 (3)
短期習得
 (4)
総合評価
 (3.5)

重要問題集

大学入試の過去問から良問が厳選された問題集です。

標準レベルから難関大対策までの問題がまとめられており、幅広い受験生を対象としています。

また、別冊の「入試直前整理」は、体系的な確認に役立ちます。

実戦 化学重要問題集 化学基礎・化学

著者 : 数研出版編集部 / 出版社 : 数研出版

評価
難易度
 (3)
解説の丁寧さ
 (3.5)
網羅性
 (3.5)
実戦力
 (3.5)
短期習得
 (3.5)
総合評価
 (4)

ゴールデンルート

最小限の問題数で受験化学の要点を身に付けるために、頻出問題の中から必ず抑えるべき良問が厳選された効率重視の問題集です。

網羅系問題集を終えた後、短期間で復習したり、反復演習をしたりする場合に適しています。

また、手早く入試問題の要点を掴みたい受験生にもおすすめです。

ゴールデンルート 化学[化学基礎・化学] 標準編

著者 : 松原 隆志 / 出版社 : KADOKAWA

評価
難易度
 (3)
解説の丁寧さ
 (3.5)
網羅性
 (3)
実戦力
 (3)
短期習得
 (4)
総合評価
 (3.5)

照井式問題集

国公立・私立大の入試問題から厳選された問題をベースに、一歩踏み込んだ知識やテクニックを学びながら、どのような問題にも対応可能な汎用力を身に付けることができます。

難関大学を志望する受験生を対象としていますが、解説はとても丁寧で、幅広いレベルの受験生が利用することができます。

古い書籍ですが、今なお、人気のある名著です。

照井式問題集 理論化学 計算問題の解き方

著者 : 照井 俊 / 出版社 : 学研プラス

照井式問題集 無機化学 知識の押さえ方

著者 : 照井 俊 / 出版社 : 学研プラス

照井式問題集 有機化学 問題文の読み方

著者 : 照井 俊 / 出版社 : 学研プラス

評価
難易度
 (3.5)
解説の丁寧さ
 (4)
網羅性
 (3)
実戦力
 (3.5)
短期習得
 (3)
総合評価
 (3.5)

標準問題精講

難関大学において頻出の問題が網羅されています。

難易度は高いですが、問題数が少なく、短期間でハイレベルな問題における定石の解法を抑えたい場合に最適です。

化学[化学基礎・化学] 標準問題精講

著者 : 橋爪 健作 / 出版社 : 旺文社

評価
難易度
 (3.5)
解説の丁寧さ
 (3.5)
網羅性
 (3.5)
実戦力
 (3.5)
短期習得
 (3.5)
総合評価
 (4)

化学の新演習

一般的な網羅系問題集よりも一歩踏み込んだ問題や、異なる角度からのアプローチが必要な問題がまとめられています。

問題数が多いため、苦手意識がある分野や、得点源にしたいテーマの問題をピックアップし、重点的に演習をしたい受験生におすすめです。

理系大学受験 化学の新演習

著者 : 卜部 吉庸 / 出版社 : 三省堂

評価
難易度
 (4)
解説の丁寧さ
 (4)
網羅性
 (3.5)
実戦力
 (4)
短期習得
 (2.5)
総合評価
 (4)

化学の新研究

高校化学から一歩踏み込んだ知識がまとめられています。

問題集の解説で不足する情報や、教科書では割愛される知識を得たり、問題を解くうえでの細かな疑問点を解消したりする際に重宝します。

理系大学受験 化学の新研究

著者 : 卜部 吉庸 / 出版社 : 三省堂

評価
難易度
 (3)
解説の丁寧さ
 (5)
網羅性
 (5)
実戦力
 (2)
短期習得
 (2)
総合評価
 (4)

新理系の化学問題100選

大学受験の参考書においては、最も難易度が高いと言っても過言ではない問題集です。

最難関大学を志望する受験生を対象としています。

このレベルまで解答できる実力が養われれば、どのような問題にも対応可能な底力と汎用力が身に付きます。

新理系の化学問題 100 選

著者 : 石川 正明 / 出版社 : 駿台文庫

評価
難易度
 (5)
解説の丁寧さ
 (3)
網羅性
 (2)
実戦力
 (4)
短期習得
 (2)
総合評価
 (2.5)
]]>
大学受験生必見!偏差値を爆上げするオススメ参考書【数学編】 https://cham.space/refmath/ Fri, 20 May 2022 00:00:00 +0000 https://cham.space/?p=4608

大学受験における 3 年間の浪人生活にて、200 冊を超える様々な参考書を通じて勉強した cham が、数学の得点アップに直結し、偏差値を 20 以上も引き上げたオススメの参考書を紹介します。 プライベートにおいて、大学 ... ]]>

大学受験における 3 年間の浪人生活にて、200 冊を超える様々な参考書を通じて勉強した cham が、数学の得点アップに直結し、偏差値を 20 以上も引き上げたオススメの参考書を紹介します。

プライベートにおいて、大学受験生のメンターを務めていますが、実際に学生に利用していただき、飛躍的な成績向上に繋がった書籍を集めました。

予備校に通わずとも、参考書のみで十分に成績向上を図ることができます。

勉強方法や、cham の浪人生活の詳細は、下記を参照ください。

受験生必見!3 浪経験に基づく大学受験の攻略法

チャート式 基礎からの数学

いわゆる「青チャート」であり、網羅系問題集の定番です。

基本問題から難関大学の入試対策までをカバーしており、基本事項や定理の証明が含まれるため、教科書としても手元に置いておきたい 1 冊です。

新課程 チャート式 基礎からの数学 I+A

著者 : チャート研究所 / 出版社 : 数研出版

チャート式基礎からの数学 II+B

著者 : チャート研究所 / 出版社 : 数研出版

チャート式基礎からの数学 III

著者 : チャート研究所 / 出版社 : 数研出版

評価
難易度
 (3)
解説の丁寧さ
 (4)
網羅性
 (4.5)
実戦力
 (3.5)
短期習得
 (3)
総合評価
 (3.5)

合格るシリーズ

知っている人と知らない人では、処理時間に大きな差が生まれる計算方法やテクニックを学ぶことができる参考書です。

効率の良い「正しい計算法」によりタイムロスを回避し、本筋である「思考」に時間を割くことができます。

得点力に直結する強力な武器を身に付けることができます。

合格る計算 数学 I・A・II・B

著者 : 広瀬 和之 / 出版社 : 文英堂

合格る計算 数学 III

著者 : 広瀬 和之 / 出版社 : 文英堂

合格る確率 + 場合の数

著者 : 広瀬 和之 / 出版社 : 文英堂

評価
難易度
 (3)
解説の丁寧さ
 (4.5)
網羅性
 (3)
実戦力
 (4)
短期習得
 (4)
総合評価
 (4.5)

重要問題集

大学入試の過去問から良問が厳選された問題集です。

標準レベルの問題がまとめられており、幅広い受験生を対象としています。

演習量をこなしたい受験生に適しています。

定理や重要事項が整理された公式集が付録されており、体系的な確認に役立ちます。

実戦数学重要問題集 I・II・III・A・B(理系)

著者 : 数研出版編集部 / 出版社 : 数研出版

評価
難易度
 (3)
解説の丁寧さ
 (3)
網羅性
 (4)
実戦力
 (3.5)
短期習得
 (3)
総合評価
 (3)

国公立標準問題集 CanPass

難関校を除く、国公立大学で頻出の標準問題が厳選された問題集です。

「このレベルの問題まで解答できれば合格圏内」という問題を中心に編集されています。

演習量をこなしたい受験生に適しています。

国公立標準問題集 CanPass 数学 I・A・II・B

著者 : 桑畑 信泰 / 出版社 : 駿台文庫

国公立標準問題集 CanPass 数学 III

著者 : 桑畑 信泰 & 古梶 裕之 / 出版社 : 駿台文庫

評価
難易度
 (3)
解説の丁寧さ
 (3.5)
網羅性
 (3.5)
実戦力
 (3.5)
短期習得
 (3)
総合評価
 (3)

ゴールデンルート

最小限の問題数で受験数学の要点を身に付けるために、頻出問題の中から必ず抑えるべき良問が厳選された効率重視の問題集です。

網羅系問題集を終えた後、短期間で要点を復習したり、反復演習をしたりする場合に適しています。

ゴールデンルート 数学 IA・IIB 標準編

著者 : 高梨 由多可 / 出版社 : KADOKAWA

ゴールデンルート 数学 IA・IIB 応用編

著者 : 高梨 由多可 / 出版社 : KADOKAWA

評価
難易度
 (3)
解説の丁寧さ
 (3.5)
網羅性
 (2)
実戦力
 (3.5)
短期習得
 (4.5)
総合評価
 (3.5)

理系数学の良問プラチカ

MARCH レベルの理系大学において、頻出の標準問題がまとめられた定評ある問題集です。

得点力の基礎となる良問が厳選され、問題数が少ないため、短期間での反復演習が可能です。

ただし、数学 III は難易度が高く、最難関大学を目指す場合に適しており、それ以外の場合はオーバーワークとなるので注意が必要です。

理系数学の良問プラチカ 数学 I・A・II・B

著者 : 大石 隆司 / 出版社 : 河合出版

評価
難易度
 (3)
解説の丁寧さ
 (3)
網羅性
 (3)
実戦力
 (3.5)
短期習得
 (4)
総合評価
 (3.5)

理系数学の良問プラチカ 数学 III

著者 : 続木 勝年 / 出版社 : 河合出版

評価
難易度
 (4.5)
解説の丁寧さ
 (3)
網羅性
 (3)
実戦力
 (4)
短期習得
 (3)
総合評価
 (3)

標準問題精講

平均的な入学難易度の国立大学をはじめ、特に難関大学において頻繁に出題される問題が網羅されています。

難易度はやや高いですが、良問が厳選されており、問題数が少なく、短期間でハイレベル問題における定石の解法を抑えたい場合に最適です。

数学 I・A 標準問題精講

著者 : 麻生 雅久 / 出版社 : 旺文社

数学 II・B 標準問題精講

著者 : 亀田 隆 / 出版社 : 旺文社

数学 III 標準問題精講

著者 : 木村 光一 / 出版社 : 旺文社

評価
難易度
 (3.5)
解説の丁寧さ
 (3.5)
網羅性
 (4)
実戦力
 (4)
短期習得
 (3.5)
総合評価
 (4.5)

分野別標準問題精講

各テーマに特化した、難関大学における頻出問題がまとめられた特化型問題集です。

その分野における基本的事項の確認から発展事項までをカバーしています。

典型パターンや定石解法を網羅することで、苦手意識を克服し、得点源にすることができます。

場合の数・確率 分野別標準問題精講

著者 : 森谷慎司 / 出版社 : 旺文社

整数 分野別標準問題精講

著者 : 大山 壇 / 出版社 : 旺文社

軌跡・領域 分野別標準問題精講

著者 : 亀田 隆 / 出版社 : 旺文社

二次曲線・複素数平面 分野別標準問題精講

著者 : 大内 重樹 / 出版社 : 旺文社

評価
難易度
 (3.5)
解説の丁寧さ
 (3.5)
網羅性
 (2)
実戦力
 (3.5)
短期習得
 (4)
総合評価
 (3.5)

ハッとめざめる確率

確率問題に対する根本的な考え方や解法が、詳しく丁寧に解説されている特化型問題集です。

苦手意識を払拭し、得点力と底力を格段に向上してくれる名著です。

ハッとめざめる確率

著者 : 安田 亨 / 出版社 : 東京出版

評価
難易度
 (3.5)
解説の丁寧さ
 (4)
網羅性
 (2)
実戦力
 (3.5)
短期習得
 (3)
総合評価
 (4)

微積分/基礎の極意

微積分における典型パターンの解法を網羅した有名な特化型問題集です。

難易度はやや高いですが、応用力が身に付き、得点力に差をつけるテクニックを学ぶことができます。

微積分 基礎の極意

著者 : 田 哲也 / 出版社 : 東京出版

評価
難易度
 (3.5)
解説の丁寧さ
 (4)
網羅性
 (3)
実戦力
 (4)
短期習得
 (3)
総合評価
 (4)

医学部攻略の数学

医学部入試における過去問から良問が厳選された問題集です。

経験の有無で得点差が大きく開く頻出問題がまとめられており、解説がとても丁寧です。

医学部の志望者以外にも、難関国公立を目指す受験生におすすめです。

医学部攻略の数学 I・A・II・B

著者 : 黒田 惠悟 / 出版社 : 河合出版

医学部攻略の数学 III

著者 : 西山 清二 / 出版社 : 河合出版

評価
難易度
 (4)
解説の丁寧さ
 (4)
網羅性
 (3.5)
実戦力
 (4)
短期習得
 (3.5)
総合評価
 (4.5)

上級問題精講

東大、京大、一橋大、東工大レベルの良問が厳選された問題集です。

難易度が高いですが、解説がとても丁寧であるため、点数に差を付けるテクニックや考え方を学ぶことができます。

難関大学を志望し、思考力を養成したい受験生におすすめです。

数学 I+A+II+B 上級問題精講

著者 : 長崎 憲一 / 出版社 : 旺文社

数学 III 上級問題精講

著者 : 長崎 憲一 / 出版社 : 旺文社

評価
難易度
 (5)
解説の丁寧さ
 (4)
網羅性
 (3)
実戦力
 (4)
短期習得
 (2)
総合評価
 (3.5)
]]>