Educational Codeforces Round 54 (Rated for Div. 2) B. Divisor Subtraction

杭州回來以後,一直在準備考試周的各個結課考試,這周才所有考完。以後感情上出了點狀況,如今一切都安定下來,都挺好,因此我又得開始搞CF了。c++

二十天左右沒練,明顯的水平降低了。好比這道題。算法

題目是這樣的,輸入一個n,每次都減去當前n的最小素因子,輸出一共能減多少次。spa

原先我還覺得還須要素數篩法曬出全部素數,每次一個一個試,看了別人的題解以後才發現不是這樣的。若是n是偶數,顯然n/2就是答案;若是n是奇數,那它的最小素因子確定也是奇數,那麼一減以後呢?我就找不出接下來最小素因子的算法描述了。其實我忘了,奇數減奇數以後,確定是個偶數,而偶數的最小素因子是2。若是能立刻想到這個,就解決了。code

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()  {
    ll n;
    cin>>n;
    if (n%2==0) {cout<<n/2<<endl;return 0;}
    for (ll i=2;i*i<=n;i++) {
        if (n%i==0) {
            n-=i;
            cout<<1+n/2<<endl;
            return 0;
        }
    }
    cout<<1<<endl;
    return 0;
}
相關文章
相關標籤/搜索