🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

297閲覧

forループのイテレータの型についての質問

renge

総合スコア18

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/03/03 00:30

先日行われたAtcoder ABC 193 のC問題の解説において納得できない点があります

問題

整数 Nが与えられます。1以上N以下の整数のうち、2以上の整数a,bを用いてa^bと表せないものはいくつあるでしょうか?
制約
Nは整数, N < 10^10

解説

Ans

1#include <iostream> 2#include <unordered_set> 3using namespace std; 4using ll = int64_t; 5int main(){ 6 ll N; 7 cin >> N; 8 unordered_set<ll> s; 9 for(ll a = 2; a * a <= N; a++){ 10 ll x = a * a; 11 while(x <= N){ 12 s.insert(x); 13 x *= a; 14 } 15 } 16 cout << N - s.size() << endl; 17}

この回答においてaがll型である必要性がわからないです。
たしかにこれをintにするとTLEとなって正常なループが行われてないことは推測できるのですが、
たかだか10^5程度である(?)aがなぜll型になるのでしょうか。

回答お願いいたします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

普通、高級言語では演算結果の型は演算対象に等しいです。
a*aがintで扱われオーバーフローします。

投稿2021/03/03 00:39

ikadzuchi

総合スコア3047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

renge

2021/03/03 00:42

あ、そういうことなんですね。理解しました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問