zoukankan      html  css  js  c++  java
  • C++ 牛客网普及组第二次测试B

    链接:https://www.nowcoder.com/acm/contest/165/B
    来源:牛客网

    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 32768K,其他语言65536K
    64bit IO Format: %lld

    题目描述

    牛牛最近学习了质数的概念。
    质数指在大于1的自然数中,除了1和它本身以外不再有其他因数。
    输入一个n,输出小于等于n最大的质数。

    输入描述:

    输入一个整数n

    输出描述:

    输出小于等于n的最大的质数
    示例1

    输入

    复制
    2

    输出

    复制
    2
    示例2

    输入

    复制
    100

    输出

    复制
    97

    备注:

    对于所有数据: 2 <= n <= 1000000000000
    30分: n <= 100000
    70分: n <= 1000000000


    看起来,明显是水题一道,可是,大家如果想要拿满100分的话,大家就需要注意一下数据范围,就在上方。
    大家可以发现,如果我们只是用平常的方法来解决这一个问题的话是明显不行的。
    我们需要对我们的方法进行一次完善,以应对这道题的数据(以后也可以用)。
    1.开long long 不必多说。
    2.因为题目要求是输出小于等于n最大的质数,所以我们只需要从这个数开始循环,直到2(因为1并没有什么作用,1并不是素数)。这样就可以减少计算,减少时间的浪费。
    3.在判断素数的时候,只需要判断在sqrt(n)之前的数,这样也可以减少时间(sqrt()是开方的意思。为什么只需要前面的数,道理大家想一想就知道了)。
    4.在判断素数的函数中,为了节省时间,我们可以在发现这个数可以被某个数(不为1和它本身)整除的时候,直接返回0,(代表着不行,也可以用bool类型的false)。
    如果一直没有找到,便可以在循环的外侧返回1(也就是bool类型的true)。


    重点就是这些,主要是节省时间,防止时间超限!!!!!!

    #include<bits/stdc++.h>
    using namespace std;
    long long  n;
    int ss(long long  x)
    {
        int flag=0;
        long long h=sqrt(x);
        for(long long i=2;i<=h;i++)
        {
            if(x%i==0)
            {
                flag=1;
                return 0;
            }
        }
        return 1;
    }
    int main()
    {
        cin>>n;
        for(long long int i=n;i>=2;i--)
        {
             if(ss(i)==1)
            {
                cout<<i;
                return 0;
            }
        }
    }
  • 相关阅读:
    Android 获取自带浏览器上网记录
    android 中的 ViewPager+ Fragment
    Git分支操作
    图形验证码的识别
    mac平台搭建安卓开发环境
    [报错集合]Uncaught ReferenceError: xxx is not defined
    Centos安装Python3
    VSCode 代码格式化 快捷键
    Mac下用Parallels Desktop安装Ubuntu
    请求头headers
  • 原文地址:https://www.cnblogs.com/FXY-180/p/9657184.html
Copyright © 2011-2022 走看看