1007. 素数对猜想 (20)
2016-04-02 18:58
387 查看
让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。
输入格式:每个测试输入包含1个测试用例,给出正整数N。
输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
输入样例:
输出样例:
第一种方法//提示段错误
段错误:
在编程中以下几类做法容易导致段错误,基本上是错误地使用指针引起的。
1)访问系统数据区,尤其是往系统保护的内存地址写数据最常见就是给一个指针以0地址。
2)内存越界(数组越界,变量类型不一致等): 访问到不属于你的内存区域。
#include <stdio.h>
#include<math.h>
#include <stdlib.h>
int isPrime(int n)
{
int i;
if(n>2&&n%2==0)
return 0;
for(i=3; i<=sqrt(n); i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int n,i;
int a[1000];
int j=0;
int cnt=0;
scanf("%d",&n);
for(i=3; i<=n; i++)
{
if(isPrime(i))
{
a[j]=i;
j++;
}
}
for(i=0; i<j; i++)
{
if(a[i+1]-a[i]==2)
cnt++;
}
printf("%d\n",cnt);
return 0;
}
第二种不采用数组
#include <stdio.h>
#include<math.h>
#include <stdlib.h>
int isPrime(int n)
{
int i;
if(n>2&&n%2==0)
return 0;
for(i=3; i<=sqrt(n); i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int n,i;
int cnt=0;
scanf("%d",&n);
int x,y;
x = 2;
y = 3;
for(i=4; i<=n; i++)
{
if(isPrime(i))
{
x=y;y=i;
if(y-x == 2)
cnt++;
}
}
printf("%d\n",cnt);
return 0;
}
现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。
输入格式:每个测试输入包含1个测试用例,给出正整数N。
输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
第一种方法//提示段错误
段错误:
在编程中以下几类做法容易导致段错误,基本上是错误地使用指针引起的。
1)访问系统数据区,尤其是往系统保护的内存地址写数据最常见就是给一个指针以0地址。
2)内存越界(数组越界,变量类型不一致等): 访问到不属于你的内存区域。
#include <stdio.h>
#include<math.h>
#include <stdlib.h>
int isPrime(int n)
{
int i;
if(n>2&&n%2==0)
return 0;
for(i=3; i<=sqrt(n); i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int n,i;
int a[1000];
int j=0;
int cnt=0;
scanf("%d",&n);
for(i=3; i<=n; i++)
{
if(isPrime(i))
{
a[j]=i;
j++;
}
}
for(i=0; i<j; i++)
{
if(a[i+1]-a[i]==2)
cnt++;
}
printf("%d\n",cnt);
return 0;
}
第二种不采用数组
#include <stdio.h>
#include<math.h>
#include <stdlib.h>
int isPrime(int n)
{
int i;
if(n>2&&n%2==0)
return 0;
for(i=3; i<=sqrt(n); i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int n,i;
int cnt=0;
scanf("%d",&n);
int x,y;
x = 2;
y = 3;
for(i=4; i<=n; i++)
{
if(isPrime(i))
{
x=y;y=i;
if(y-x == 2)
cnt++;
}
}
printf("%d\n",cnt);
return 0;
}
相关文章推荐
- tableView的代理方法中cell的按下和离开
- 扩展的欧几里德算法的学习
- Linux——makefile
- python语言学习5——输入和输出
- 当Gerrit的Cubmit类型为cherry pick时的工作方式
- 【POJ2057】The Lost House【TreeDP】
- 卷积Groups & Group Convolutions
- MyEclipse主题背景多样化
- bzoj 1477: 青蛙的约会
- Hooks——钩子概览
- pr基本技巧及相关教程
- 解决在树莓派上安装Mysql出错
- 可视化MNIST之降维探索Visualizing MNIST: An Exploration of Dimensionality Reduction-1
- python中的装饰器@staticmethod和@classmethod
- Django基础
- Codeforces Round #346 (Div. 2) E. New Reform
- 移植mjpg-streamer
- hdu4123(树的直径+ST算法)
- UITableView的介绍及使用
- 浅析ltp测试流程