丸め誤差や浮動小数点数をあまり理解していないが故のWAです。備忘として残しておきます。online.提出したプログラムはこれです。表せることが分かっているので、取り敢えず構成している素数のうちどっちか一つ分かれば良いです。関数で割り試しを行い、素数を一つ見つけてきます。うちどちらかは実際に二乗して剰余演算を行って判定します。WAとなり、なんとなく誤差のせいだとは分かりましたが、math.sqrtをずっと疑ってしましました。結論、「int(t/p1**2)」という書き方が悪く、「it//p1**2」と切り捨て除算を行えばACとなります。整数除算では切り捨て除算(//)を使うコンピュータ演算では、大きな数を小さな数で除算する時などに誤差が発生することがあります。これは精度誤差などと言って、コンピュータ上で表現できる桁数に限りがある為に発生する誤差です。無限桁の小数などは必ずあるため精度誤差は必ず生じるものですが、これを小さくする工夫は必要です。以下のように、大きな桁数の数字を小さな数で割る場合、除算結果が有効桁数を超えるため、桁が小さい部分が近似されて誤差が発生します。30030030030030030整数同士の除算の場合は、切り捨て除算(//)を用いることで誤差を抑えることができます。通常の除算(/)では小数点以下の数値を保持したまま計算しますが、切り捨て除算(//)では小数点以下を切り捨てて計算します。小数点以下を切り捨てて計算した場合、精度の低下の影響は小数点以下だけに限られます。求める数値が整数の場合、小数点以下の精度は必要ないので、切り捨てて計算したほうが求めている数値になりやすいということです。処理速度という面でもこの場合、切り捨て除算を用いた方が高速です。通常除算で小数点以下を保持して計算した後、intやfloorで小数点以下を切り捨てるよりも、切り捨て除算で内部的に最初から小数点以下を切り捨てて計算したほうが計算量も少なくすみます。比べてそれほど小さくなければ、切り捨てだろうが通常除算だろうが結果が同じになることです。#300300300300入力例のテストケースでは問題ないのに、提出したら数問だけWAになる場合、こういった誤差へのケアが足りていないことも考えられます。なんとなく誤差のせいなんだろうと分かっていても、内部的に誤差が発生する仕組みを理解していないと、どこで誤差が発生しているのか分からないことがあるので、こういった知識もちゃんと頭に入れておくべきだと感じました。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。265を、備忘的にギリ茶の私の回答と反省を日記的に残しておきます。D問題が勉強になりました。D問題、後少しというとこで時間ぎれでした。B問題で焦ってもたついたのも反省です。257を、備忘的にギリ茶の私の回答と反省を日記的に残しておきます。今回はC問題でつまづきました。個人的に競プロでよく使うんだけど、毎回調べたりしちゃうポイントとかをまとめてます。267)【Python】AtCoderで使える小ネタ・テクニック集ページ内検索AI・ITAtCoderガジェットプログラミングInstagramTwitter大津ミルクAIやガジェット、プログラミングに関する記事を上げる総合ITメディアです。大学院では機械学習・AIの研究。oatmilk.jp。