zoukankan      html  css  js  c++  java
  • CodeForces-1076B Divisor Subtraction 找规律

    题目链接:https://vjudge.net/problem/CodeForces-1076B

    题意:

    题目要求给定一个数,要求每次减去其最小素因数(既是素数又是其因数),问直到n=0需要做几次运算。

    分析:

    首先如果n为素数,则其最小素因数就是它本身,故第一次运算n:=n-n即得0,只需要一次运算。当n为偶数时,素因子恒为2,故每次减2直到0,所以运算次数为n/2次,当n为奇数是,首先减一次最小素因子,因为最小素因子一定是奇数,故奇-奇=偶,变为偶数后就按上述做法求得运算次数即可。

    总结如下:

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    #include <vector>
    #include <queue>
    typedef long long ll;
    using namespace std;
    ll n;
    
    bool prime(ll x) {
        for(ll i = 2; i <= sqrt(x); i++) {
            if(x % i == 0)
                return false;
        }
        return true;
    }
    
    ll min_div(ll x) {
        for(ll i = 2; i < n; i++) {
            if(x % i == 0)
                return i;
        }
    }
    
    int main(void) {
        while(scanf("%lld", &n) == 1) {
            if(prime(n)) {
                printf("1
    ");
                continue;
            }
            else if(n % 2 == 0) {
                printf("%lld
    ", n/2);
                continue;
            }
            else {
                n -= min_div(n);
                printf("%lld
    ", n/2+1);
            }
        }
    }
  • 相关阅读:
    C++ 日期 & 时间
    C++ 引用
    C++ 指针
    C++ 字符串
    C++ 数组
    C++ 数字
    C++ 函数
    C++ 判断
    C++ 循环
    C++ 运算符
  • 原文地址:https://www.cnblogs.com/RB26DETT/p/10763343.html
Copyright © 2011-2022 走看看