B. Divisor Subtraction

B. Divisor Subtraction

time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

You are given an integer number n

. The following algorithm is applied to it:

  1. if n=0
  • , then end algorithm;
  • find the smallest prime divisor d
  • of n
  • ;
  • subtract d
  • from n and go to step 1

    Determine the number of subtrations the algorithm will make.

    Input

    The only line contains a single integer n

    (2≤n≤1010

    ).

    Output

    Print a single integer — the number of subtractions the algorithm will make.

    Examples

    Input

    Copy

    5
    
    Output

    Copy

    1
    
    Input

    Copy

    4
    
    Output

    Copy

    2
    

    Note

    In the first example 5

    is the smallest prime divisor, thus it gets subtracted right away to make a 0

    .

    In the second example 2

    is the smallest prime divisor at both steps.

    题意:给一个n,和一个算法,求这个算法能执行多少次。算法内容:

    1. 如果n等于0,算法结束。

    2. 找到n最小的素数因子d

    3. n-=d,之后回到步骤1

  • 分析:对于输入的n有3种情况:

    1. 素数-------------输出1

    2. 偶数-------------输出n/2

    3. 奇数或合数-------------减去最小的素因子,变为偶数,再执行偶数的计算方法并加1

  • #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <string>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    
    bool IsPrime(long long num)	//num为我们要判断的数
    {
    	for (long long i = 2; i <= sqrt(num); i++)		//最优化的判断方式
    	{
    		if (num%i == 0)
    		{
    			return false;
    		}
    	}
    	return true;
    }
    long long fi(long long n){
        for(long long i = 2;i < n;i++){
            if(n % i == 0)
                return i;
        }
    }
    
    int main()
    {
        long long n;
        while(cin>>n){
            long long t = 0;
            if(n % 2 == 0)
                cout<<n/2<<endl;
            else{
                if(IsPrime(n))
                    cout<<1<<endl;
                else{
                    t = n-fi(n);
                    cout<<t/2+1<<endl;
                }
            }
        }
        return 0;
    }
    

     

全部评论

相关推荐

面试官全程关摄像头1.自我介绍一下2.React和Vue哪个更熟悉一点3.你在之前那段实习经历中有没有什么技术性的突破(我只是实习了44天工作28天,我把我能说的都说了)4.你封装的哪个表单组件支不支持动态传值5.自己在实习阶段Vue3项目封装过hook吗6.hook有什么作用7.Vue2和Vue3的响应式区别(我说一个是proxy是拦截所有的底层操作,Object.defineProperty本身就是一个底层操作,有些东西拦截不了,比如数组的一些操作还有等等,面试官就说实在要拦截能不能拦截????我心想肯定不行呀,他的底层机制就不允许吧)8.pinia和vuex的区别(这个回答不出来是我太久没用了)9.pinia和zustand的区别,怎么选(直接给我干懵了)(我说react能用pinia吗&nbsp;&nbsp;他说要用的话也可以)10.渲染一万条数据,怎么解决页面卡顿问题(我说分页、监听滚轮动态加载,纯数据展示好像还可以用canvas画)(估计是没说虚拟表单,感觉不满意)11.type和interface的区别12.ts的泛型有哪些作用(我就说了一个结构相同但是类型不同的时候可以用,比如请求响应的接口,每次的data不同,这里能用一个泛型,他问我还有什么)13.你项目用的是React,如果让你再写一遍你会选择什么14.pnpm、npm、yarn的区别15.dependencies和devdependencies的区别总而言之太久没面试了,上一段实习的面试js问了很多。结果这次js一点没问,网络方面也没考,表现得很一般,但是知道自己的问题了&nbsp;&nbsp;好好准备,等待明天的影石360和周四的腾讯了&nbsp;&nbsp;加油!!!
解zj:大三的第一段面试居然是这样的结局
查看15道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务