NYOJ 24(素数距离)

摘要:
质数距离问题的时间限制:3000ms |内存限制:65535KB难度:2描述现在给你一些数字,你需要编写一个程序来输出与这些整数相邻的最近质数及其距离长度。如果左侧和右侧有等距长度的素数,则将输出左侧的值和相应的距离。如果输入整数本身是质数,则输出质数本身。测试数据集的数量N在输出0的第一行中给出,并且在接下来的N行中有一个整数M,并且在输出的每一行中输出两个整数AB。其中A表示最接近相应测试数据的质数,B表示它们之间的距离。

素数距离问题

时间限制:3000 ms | 内存限制:65535 KB
难度:2
描述
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
输入
第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),
输出
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入
3
6
8
10
样例输出
5 1
7 1
11 1
 #include<stdio.h>
#include<string.h>
#include<math.h>
#define N 1500000
bool visit[N];
void prim()
{
	int temp,i,j;
	temp=(int)sqrt(N+0.5);
	memset(visit,0,sizeof(visit));
	for(i=2;i<=temp;i++)
	if(!visit[i])
	{
		for(j=i*i;j<=N;j+=i)
			visit[j]=1;
	}
}
/* 
bool is_prim(int x) 
{  
	int s;
	for(s=2;s<=sqrt(1.0*x);s++) 
		 if(x%s==0)   
			 return false;
	return true;
 }
 */
int main()
{
	prim();
	int T,m;int i,j=0,k; int temp1,temp2;
	scanf("%d",&T); 
	while(T--) 
	{ 
		scanf("%d",&m); 
		 if(m==1)  
		 {  
			 printf("2 1\n");  
			 continue; 
		 } 
		 /*
		 for(i=m;i>1;i--) 
		 {
			 if( is_prim(m))
			 {
				 printf("%d %d\n",m,0);
				 break;
			 }
			 */
			for(j=m;j>=1;j--)
			{
				if(!visit[j])
					temp2=m-j;
				for(k=m+1;;k++)
					if(!visit[k])	
					{
						temp1=k-m;
						break;
					}
				if(!visit[j]&&!visit[k])
				{
					if(temp1>=temp2)
                                                           /*等号表示相同情况下应输出左边的*/

						printf("%d %d\n",j,temp2);
					else
						printf("%d %d\n",k,temp1);
					break;
				}
			}
	}							 
	return 0;
}


                

免责声明:文章转载自《NYOJ 24(素数距离)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇html基础:基本标签linux中,查看某个进程打开的文件数?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

poj2689(素数区间筛法模板)

题意: 给出一个区间 [l, r] 求其中相邻的距离最近和最远的素数对 . 其中 1 <= l < r <= 2,147,483,647, r - l <= 1e6 . 思路: 素数区间筛 要找到 [l, r] 中相邻最近和最远的素数对肯定是需要找出 [l, r] 内所有素数 . 但是无论是直接线性打表还是暴力都处理不了这么大的数据...

中国石油大学(华东)计算机复试C语言参考题库

目录 复试c语言 【研究创新型】8.1 谁能出线 【设计型】8.2 统计素数的个数 【设计型】8.3 数组逆序输出 【设计型】8.4 在屏幕上显示杨辉三角形 【设计型】8.5 求最大值 【设计型】8.6 二维数组 【设计型】8.11 存储并输出一个矩阵 【设计型】8.7 给数组中的元素按顺序编号 【设计型】8.8 求各位数字组成的最大数 【设计型】8...

MD5加密和RSA加密

1.MD5加密    MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),MD5算法的使用不需要支付任何版权费用。      MD5的功能:       ①.输入任意长度的信息,经过处理,输出为128位的信息(数字指纹);      ②.不同的输入得到的不同的结果(唯一性);      ③.根据128位的输...

判断一个数是否是素数

判断一个数是否是素数: 输入一个数,判断是否是素数;第一行输入一个整数n,表示有n组测试数据; 第二行输出结果,每组测试数据占一行。 1 //素数判断 2 #include<stdio.h> 3 int isprime(int num) //自定义函数判断是否是是素数 4 { 5 int flag=1; 6 inti; 7...

超级素数幂--全国模拟(一)

[编程题] 超级素数幂 时间限制:1秒 空间限制:32768K 如果一个数字能表示为p^q(^表示幂运算)且p为一个素数,q为大于1的正整数就称这个数叫做超级素数幂。现在给出一个正整数n,如果n是一个超级素数幂需要找出对应的p,q。  输入描述: 输入一个正整数n(2 ≤ n ≤ 10^18)     输出描述: 如果n是一个超级素数幂则输出p,q,以空格...

素数回文(高效判断素数法)

Problem Description xiaoou33对既是素数又是回文的数特别感兴趣。比如说151既是素数又是个回文。现在xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数。(5 <= a < b <= 100,000,000);   Input 这里有许多组数据,每组包括两组数据a...