1007 素数对猜想(20 分)(C/C++版本)
让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N(<),请计算不超过N的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N。
输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
这道题思路很简单:
1.找出小于N的素数。
2.筛选符合条件的数。
#include <bits/stdc++.h> using namespace std; int main() { unsigned int N, k = 1, count = 0; size_t n = 2; int *ptr; cin >> N; ptr = new int[N]; //创建动态数组储存素数 ptr[1] = 3; ptr[0] = 2; for (size_t m = 5; m <= N; ++m) { for (size_t i = 2; i <= sqrt(m); ++i) { //对于判断是否为素数,只需要判断小于这个数的平方根的数就行,可以自己想一想 if (m % i == 0) { k = 0;//不是素数则令k = 0,在下面条件中剔除此数 break; } k = 1; } if (k) { ptr[n] = m; ++n; } } for (size_t j = 0; j < n - 1; ++j) if (ptr[j + 1] - 2 == ptr[j])//前数与后数相差2 ++count; cout << count; return 0; }
C版本原理和C++一样
#include <stdio.h> #include <math.h> #include <stdlib.h> int main() { unsigned int N, k = 1, count = 0, n = 2, m, i, j; int *ptr; scanf("%u", &N); ptr = (int*)malloc(sizeof(int) * N); ptr[1] = 3; ptr[0] = 2; for (m = 5; m <= N; ++m) { for (i = 2; i <= sqrt(m); ++i) { if (m % i == 0) { k = 0; break; } k = 1; } if (k) { ptr[n] = m; ++n; } } for (j = 0; j < n - 1; ++j){ if (2 == ptr[j + 1] - ptr[j]){ ++count; } } printf("%d", count); return 0; }

浙公网安备 33010602011771号