Content

给定一个数 \(n\),执行如下操作:

  1. 如果 \(n=0\) 结束操作。
  2. 找到 \(n\) 的最小质因子 \(d\)。
  3. \(n\leftarrow n-d\) 并跳到操作 \(1\)。

请求出循环操作的次数。

数据范围:\(2\leqslant n\leqslant 10^{10}\)。

Solution

首先我们看是否是素数,如果是素数的话,那么其最小质因子一定是它本身,那么答案就是 \(1\)。

如果不是素数,我们再根据奇偶性来分类讨论。由于偶数的情况比较简单,我们先讨论 \(n\) 是偶数的情况。很显然,其最小质因子一定是 \(2\),并且因为减完以后还是偶数,所以一定会不停地减 \(2\),所以答案就是 \(\dfrac{n}{2}\)。

最后再看到奇合数,我们找到一个最小的质因子 \(d'\) 之后减去,因为奇合数一定都是由奇质数相乘得到,所以找到的最小质因子也一定是奇数,而我们都知道,奇数减奇数等于偶数,所以就又回到了偶数的情况了,所以答案就是 \(\dfrac{n-d'}{2}+1\)。

由于 \(n\leqslant 10^{10}\),所以我们判断 \(n\) 是否是素数可以直接用 \(\mathcal{O}(\sqrt{n})\) 的试除法判断是否是素数,然后看最小质因子时,可以先用埃氏筛筛出 \(10^5\) 以内的素数,然后再去一个一个找最小的质因子即可,并且可以证明,寻找最小质因子最多只需要 \(1\) 次,所以复杂度可以算得上很优秀的了。

Code

long long n;
int isprime[100007]; bool prime(long long x) {
for(int i = 2; i <= sqrt(x); ++i)
if(!(x % i)) return 0;
return 1;
}
void pre() {
for(int i = 2; i <= 100000; ++i) isprime[i] = 1;
for(int i = 2; i <= 100000; ++i)
if(isprime[i])
for(int j = i * 2; j <= 100000; j += i)
isprime[j] = 0;
}
void work(long long x) {
pre();
for(int i = 2; i <= sqrt(x); ++i)
if(!(x % i) && isprime[i]) {
if(x % 2) printf("%lld", (x - i) / 2 + 1);
else printf("%lld", x / 2);
return;
}
return;
} int main() {
scanf("%lld", &n);
if(prime(n)) printf("1");
else work(n);
}

CF1076B Divisor Subtraction 题解的更多相关文章

  1. Divisor Subtraction

    Description You are given an integer number nn. The following algorithm is applied to it: if n=0, th ...

  2. B. Divisor Subtraction

    链接 [http://codeforces.com/contest/1076/problem/B] 题意 给你一个小于1e10的n,进行下面的运算,n==0 结束,否则n-最小质因子,问你进行多少步 ...

  3. CodeForces-1076B Divisor Subtraction 找规律

    题目链接:https://vjudge.net/problem/CodeForces-1076B 题意: 题目要求给定一个数,要求每次减去其最小素因数(既是素数又是其因数),问直到n=0需要做几次运算 ...

  4. Codeforces Educational Codeforces Round 54 题解

    题目链接:https://codeforc.es/contest/1076 A. Minimizing the String 题意:给出一个字符串,最多删掉一个字母,输出操作后字典序最小的字符串. 题 ...

  5. Educational Codeforces Round 54 (Rated for Div. 2) ABCD

    A. Minimizing the String time limit per test 1 second memory limit per test 256 megabytes Descriptio ...

  6. CoderForces Round54 (A~E)

    ProblemA Minimizing the String 题目链接 题解:这一题读完题就写了吧.就是让你删除一个字母,使得剩下的字符组成的字符串的字典序最小:我们只要第一个当前位置的字符比下一个字 ...

  7. Educational Codeforces Round 54 (Rated for Div. 2) Solution

    A - Minimizing the String solved 题意:给出一个字符串,可以移掉最多一个字符,在所有可能性中选取一个字典序最小的. 思路:显然,一定可以移掉一个字符,如果移掉的字符的后 ...

  8. codeforces1076 A.B.C.D.E

    1076A 1076B 1076C 1076D 1076D A. Minimizing the String  You are given a string s consisting of n low ...

  9. Codeforces Edu Round 54 A-E

    A. Minimizing the String 很明显,贪心之比较从前往后第一个不一样的字符,所以可以从前往后考虑每一位,如果把它删除,他这一位就变成\(str[i + 1]\),所以只要\(str ...

随机推荐

  1. java获取CPU核心数

    package ThreadTest; public class ThreadTest05 { public static void main(String[] args) { //获取CPU核心 S ...

  2. Python学习手册(第四版)——使用入门(自学用)

    Python的优点 -可读性 -可移植性 -不是一个独立的工具,可以调用各种库,同时也可以被调用等等 -使编程变得很有趣 -面向对象 -可混合 Python的理念 随便找的一张图 脚本语言? Pyth ...

  3. Electron快速入门之debug

    view->toggleDevelpper Tools 本地桌面调试 浏览器debug "start": "electron --inspect=5858 .&qu ...

  4. 百胜中国使用Rainbond实现云原生落地的实践

    百胜中国使用Rainbond实现云原生落地的实践 关于百胜中国 自从1987年第一家餐厅开业以来,截至2021年第二季度,百胜中国在中国大陆的足迹遍布所有省市自治区,在1500多座城镇经营着11023 ...

  5. 实战!spring Boot security+JWT 前后端分离架构认证登录!

    大家好,我是不才陈某~ 认证.授权是实战项目中必不可少的部分,而Spring Security则将作为首选安全组件,因此陈某新开了 <Spring Security 进阶> 这个专栏,写一 ...

  6. R之dplyr::select/mutate函数扩展

    select函数 dplyr包select函数用的很多,不过我们一般也是通过正反选列名或数字来选择列. 常见用法如: select(iris,c(1,3)) select(iris,1,3) #同上 ...

  7. Bedtools genomecov 计算覆盖度

    简单说明: 从2.28.0版开始,bedtools使用htslib库支持CRAM格式 除了BAM文件,bedtools默认所有的输入文件都以TAB键分割 除非使用-sorted选项,bedtools默 ...

  8. 计算机网络-4-7-内部网关协议OSPF

    内部网关协议OSPF(开放最短路径优先) 出现的原因:为了克服RIP协议的缺点在1989年开发出来,**开放 表明OSPF协议不受任何厂家的限制.最短路径优先是因为使用了最短路径算法SPF**. OS ...

  9. A Child's History of England.37

    Many other noblemen repeating and supporting this when it was once uttered, Stephen and young Planta ...

  10. Oracle数据库导入与导出方法简述

    说明: 1.数据库数据导入导出方法有多种,可以通过exp/imp命令导入导出,也可以用第三方工具导出,如:PLSQL 2.如果熟悉命令,建议用exp/imp命令导入导出,避免第三方工具版本差异引起的问 ...