1.题目描述—请见链接
2.思路解析
分为两部分考虑:
1、判断数n是否为素数:如果从2到根号n,n能够被其中任意⼀个值整除,则n不是素数;反之,则n为素数。
2、判断相邻两个素数是否为素数对:将前一个素数保存起来,用当前素数减去前一个素数,如果为二,则素数对个数加1。
3.代码
using System;
class Program
{
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
int temp = 3; // temp用于存放上一个的素数
int count = 0; // count用于记录素数对个数
bool flag = true; // flag记录当前元素是否为素数
if (n >= 5)
{
for (int i = 5; i <= n; i++)
{
flag = true;
// 判断当前元素i是不是素数
for (int j = 2; j*j <= i; j++)
{
// 如果不是素数,则跳出当前循环
if (i % j == 0)
{
flag = false;
break;
}
}
if (flag)
{
if (i - temp == 2) count++;
temp = i;
}
}
}
Console.Write(count);
Console.ReadKey();
}
}
4.总结
1、直接用运算符运算要比调用库函数效率高。例如本题中判断素数用j * j <= i的效率要高于j <= Math.Pow(i,0.5),要注意这个细节,正是这个细节,有一个测试就超时了。
2、能不申请新变量尽量不要申请,降低空间复杂度。