尝试的修改:(但都失败了)
1.把数组a[2000]放到int main()外面,作为全局变量,同时扩大数组的容量到2000,防止爆栈,但还是显示段错误;
2.如果把2000换到10000的量级,OJ平台就显示运行超时;
代码:
#include
{
int a[2000];
int n, num = 2, i = 0;
cin >> n;
while (num <= n)
{
if (num == 2)
{
a[i] = num;
num += 1;
i++;
}
else
{
int sign = 0;
for (int k = i - 1; k >= 0; k--)
{
if (num % a[k] == 0)
{
sign++;
break;
}
}
if (sign == 0)
{
a[i] = num;
i++;
}
num += 2;
}
}
num = 0;
int k1 = 1;
while (k1 <= i && i > 1)
{
if (a[k1] - a[k1 - 1] == 2)
{
num++;
}
k1++;
}
cout << num;
}
报错显示:
int main() {
int a[2];
int n, num = 2,count=0;
cin >> n;
a[1] = num;
if (n>2)
{
while (num <= n)
{
int sign = 0;
for (int k = 2; k < num; k++)
{
if (num % k == 0)
{
sign++;
break;
}
}
if (sign == 0)
{
a[0] = a[1];
a[1] = num;
if (a[1] - a[0] == 2) {
count++;
}
}
num++;
}
}
cout << count;
}
a[2000]是作为全局变量放在了main函数外面
供参考:
#include <iostream.h>
using namespace std;
int isPrime(int n) //素数判断
{
int i;
if(n <= 3) return n > 1;
for(i = 2 ; i*i <= n ; i++)
if(n%i == 0) return 0;
return 1;
}
int main()
{
int k = 0,s[100001];
for(int i = 1 ; i < 100001 ; i++)//对100000内的所有素数打表
{
if(isPrime(i))
{
s[k] = i;
k++;
}
}
int N,count = 0;
cin >> N;
for(int i = 1 ; ; i++)
{
if(s[i]>N) //超出范围N直接跳出循环
break;
if(s[i]-s[i-1] == 2) //相邻素数相差为2的可能性
count++;
}
cout << count << endl; //输出最后结果
return 0;
}