1. 程式人生 > >B. Divisor Subtraction

B. Divisor Subtraction

連結

[http://codeforces.com/contest/1076/problem/B]

題意

給你一個小於1e10的n,進行下面的運算,n==0 結束,否則n-最小質因子,問你進行多少步

分析

顯然n為偶數時,,就會一直-2,不是偶數的話可能是合數或者素數
只需要找根號n內就可以找到合數的最小質因子,否則就是質數
一個奇數-一個奇數一定是偶數,看程式碼吧

程式碼

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
    ll n;
    while(cin>>n){
        bool flag=0;
        ll i;
        for(i=2;i*i<=n;i++)
            if(n%i==0){
                flag=1;
                break;
            }
    if(flag)    cout<<(n-i)/2+1<<endl;
    else cout<<1<<endl;
    }
    return 0;
}