Toy と帽子と ADP BE

主にプログラミングに関わる話をゆるくエモくやっていきます

A. Candies (Codeforces Round #636 Div. 3)

問題

https://codeforces.com/contest/1343/problem/A

問題概要

k>1のときx+2x+4x+...+2^{k−1}x=nを満たすようなxを一つ求めよ。

考察

与えられた式を変形すると(2^{k}-1)x=nとなります。よって(2^{k}-1)がnの約数となるようなkを見つけてきてn/(2^{k}-1)をすればよいです。

kは2から順に一つずつ見ていけばよいです。2^{k}-1 \leq n \leq 10^{9}なので、kはたかだか29までとなります。

#include <bits/stdc++.h>
using namespace std;
 
int main() {
    int t;
    cin >> t;
    while (t--) {
        int n;
        cin >> n;
        int k = 2;
        while (n % ((int)pow(2, k) - 1) != 0) k++;
        cout << n / ((int)pow(2, k) - 1) << endl;
    }
}

個人的反省

算数力のなさを遺憾なく発揮して式変形に時間をかけてしまい、A問題なのに10分以上かかってしまいました。結果はともかくとして、立ち回りとしてはこれを後回しにしてまずBを見るべきでしたね。