C++ 牛客網普及組第二次測試B
阿新 • • 發佈:2018-12-10
牛牛最近學習了質數的概念。
質數指在大於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; } } }