1. 程式人生 > >C++ 牛客網普及組第二次測試B

C++ 牛客網普及組第二次測試B

牛牛最近學習了質數的概念。 質數指在大於1的自然數中,除了1和它本身以外不再有其他因數。 輸入一個n,輸出小於等於n最大的質數。

輸入描述:

輸入一個整數n

輸出描述:

輸出小於等於n的最大的質數
示例1

輸入

複製
2

輸出

複製
2
示例2

輸入

複製
100

輸出

複製
97

備註:

對於所有資料: 2 <= n <= 100000000000030分: n <= 10000070分: 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; } } }