XTUc语言程序设计1237Prime Twins

这是一个关于计算给定区间内孪生素数对数量的程序。程序首先使用埃拉托斯特尼筛法找出所有小于5000000的素数,然后统计每个数及其后的第二个数是否都是素数,以计算孪生素数对。对于多个测试样例,程序读取区间[a, b]并输出该区间内的孪生素数对数量。
摘要由CSDN通过智能技术生成

**

Prime Twins

**
[ Submit Code ] [ Top 20 Runs ] [ Runs Status ]
Acceteped : 1602 Submit : 4838
Time Limit : 1000 MS Memory Limit : 65536 KB

Description
题目描述

如果n和n+2都是素数,我们称其为孪生素数,比如3和5,5和7都是孪生素数。 给你一个区间[a,b],请问期间有多少对孪生素数?
输入

第一行是一个整数K(K≤ 10000),表示样例的个数。 以后每行一个样例,为两个整数,a和b,1≤a≤b≤5000000。
输出

每行输出一个样例的结果。
样例输入

5
1 3
1 10
1 100
1 1000
1 5000000

样例输出

0
2
8
35
32463

Sample Input

Sample Output

Source

[ Submit Code ] [ Top 20 Runs ] [ Runs Status ]
[ Home Page ] [ Go Back ]

#include <stdio.h>

int isprime[5000001];  //素数为1 
int count[5000001];
/*main函数里面的数组是开在栈区(stack),在函数外面的是开在数据区的。栈区的内存比较小,所以当数组非常大的时候,就会报错。假如把数组放在数据区就不会出现这个问题,因为数据区的内存很大。
*/
int main()
{

	int i,j;	
	
	for(i=2;i<=5000000;i++)
	{
		isprime[i]=1;
	}
	isprime[0]=0;
	isprime[1]=0;

	for(i=2;i<=5000000;i++) //如果i不是素数,就令isprime[i]=0 
	{
		if(i==2)
		{
			isprime[i]=1;
		}
		if(isprime[i]==0)
		{
			continue;
		}
		for(j=i+i;j<=5000000;j=j+i)
		{
			isprime[j]=0;
		}
	}
	
	for(i=0;i<=5000000;i++) count[i]=0;
	for(i=1;i<=5000000;i++)
	{
		count[i]+=count[i-1];
		if(isprime[i]==1&&isprime[i+2]==1)
		{
			count[i+2]++;
		 } 
	 }
	 
	 int K,a,b;
	 scanf("%d",&K);
	 while(K--)
	 {
	 	scanf("%d%d",&a,&b);
	 	int c=count[b]-count[a+1];
	 	printf("%d\n",c);
	  } 
	return 0;
 } 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值