C++ PAT 乙级 1007——素数对猜想
生活随笔
收集整理的這篇文章主要介紹了
C++ PAT 乙级 1007——素数对猜想
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目詳情
讓我們定義 dnd_ndn? 為 dn=pn+1?pnd_n = p_{n + 1} - p_ndn?=pn+1??pn?,其中 pip_ipi? 是第 i 個素數。顯然有 d1=1d_1 = 1d1?=1,且對于 n > 1有 dnd_ndn? 是偶數。
“素數對猜想”認為“存在無窮多對相鄰且差為2的素數”,現給定任意正整數N(<105)N(<10^5)N(<105),請計算不超過N的滿足猜想的素數對的個數。
輸入格式
輸入在一行給出正整數N。
輸出格式
在一行中輸出不超過N的滿足猜想的素數對的個數。
題目分析
并且,由于要對素數進行計數,若不適用 bool 變量 sign 作為標記,在第二重循環內無論是否為素數,都會執行 count1++ 操作,所以需要設置sign來作限制(覺得這一步可以優化,先想想),code如下:
bool sign = true;for (int i = 2; i <= n; ++i){for (int j = 2; j <= sqrt(i); ++j){if (i % j == 0){sign = false;break;}}if (sign == true){num[count1] = i;count1++;}sign = true;}Final Code
#include<iostream> #include<cmath> using namespace std;int num[10000];int main() {int n, count1 = 0;cin >> n;bool sign = true;for (int i = 2; i <= n; ++i){for (int j = 2; j <= sqrt(i); ++j){if (i % j == 0){sign = false;break;}}if (sign == true){num[count1] = i;count1++;}sign = true;}int count2 = 0;for (int i = 0; i < count1; ++i){cout << num[i] << endl;if (num[i + 1] - num[i] == 2)++count2;}cout << count2;return 0; }注意:
關于那個計數,give me some time ~~
總結
以上是生活随笔為你收集整理的C++ PAT 乙级 1007——素数对猜想的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MATLAB基础教程(2) 语言基础知识
- 下一篇: s3c2440移植MQTT