您的位置:首页 > 职场人生

PAT 乙级 1007

2017-01-04 12:25 148 查看


1007. 素数对猜想 (20)

让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。

输入格式:每个测试输入包含1个测试用例,给出正整数N。

输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
输入样例:
20

输出样例:
4

这道题目做对还是很简单的,只要注意边界的处理就好了。但比较重要的是要做得快~充分利用质数的性质,减少计算次数。

using System;

namespace PAT
{
class Program
{
static void Main(string[] args)
{
//非1位数只用验证1、7、9这三个数字
int limit = int.Parse(Console.ReadLine());
int count = 0;
int useLimit = limit - 2;
int rest;
for (int i = 9; i <= useLimit; i = i + 2)
{
rest = i % 10;
if (rest == 1 || rest == 7 || rest == 9)
{
if (IsPrime(i))
if (IsPrime(i + 2))
count++;
}
}
if (limit >= 7)
count = count + 2;  //大于7需要给数加2
else if (limit >= 5)    //大于5小于7的数,则给答案加1即可
count++;
Console.WriteLine(count);
}

//判断一个大于1的整数是否是质数
static bool IsPrime(int number)
{
int sqrt = (int)Math.Sqrt(number);
for(int i = 2; i<= sqrt; i++)
{
if(number % i == 0)
{
return false;
}
}
return true;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# 求职 算法 PAT