素数距离问题(水题一个)
2017-10-05 21:28
253 查看
(1)类型:数学素数。
(2)题目: Description
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
Input
第一行给出测试数据组数N,
接下来的N行每行有一个整数M,
Output
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
Sample Input
3
6
8
10
Sample Output
5 1
7 1
11 1
(3)解题思路:这题和一般的素数筛问题没什么区别,初始值n也是很大。利用素数筛就可以降低复杂度了。
(4)时间复杂度:O(n)。
(5)总结:此题唯一有的小巧妙的地方就是距离的计算上,其他没有特别之处。
(6)代码:
(2)题目: Description
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
Input
第一行给出测试数据组数N,
接下来的N行每行有一个整数M,
Output
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
Sample Input
3
6
8
10
Sample Output
5 1
7 1
11 1
(3)解题思路:这题和一般的素数筛问题没什么区别,初始值n也是很大。利用素数筛就可以降低复杂度了。
(4)时间复杂度:O(n)。
(5)总结:此题唯一有的小巧妙的地方就是距离的计算上,其他没有特别之处。
(6)代码:
#include<iostream> #include<cstring> const int MAX_N=1000000+6; using namespace std; int isprime[MAX_N+1]; void prime(int n){ memset(isprime,true,sizeof(isprime)); isprime[0]=0;isprime[1]=0; for(int i=2;i<=MAX_N;i++) if(isprime[i]) for(int j=2*i;j<n;j+=i)isprime[j]=0; } int main(){ ios::sync_with_stdio(false);cin.tie(0); int i,T,n;cin>>T; prime(MAX_N); while(T--){ cin>>n; int l1=-1e9,r1=1e9; for(i=n;i>=2;i--) if(isprime[i]){l1=i;break;} for(i=n;i<=1e6+6;i++) if(isprime[i]){r1=i;break;} if(n-l1<=r1-n) cout<<l1<<" "<<n-l1<<endl; else cout<<r1<<" "<<r1-n<<endl; } }
相关文章推荐
- 素数距离问题 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数
- NYOJ【24】素数距离问题【水题】
- [南阳OJ-No.24]素数距离问题|现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。 如果输入的整数本身就是素
- 最短路径问题平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点间的直线距离。
- 素数距离问题
- NYOJ - 24 素数距离问题
- [南阳OJ-No.22]素数求和问题|现在给你N个数(0<N<1000),现在要求你写出一个程序,找出这N个数中的所有素数,并求和。
- 素数距离问题
- NYOJ 素数 最近距离问题
- 圆周率,孪生素数,反转串,最近距离,基因牛,迷宫问题(2011年蓝桥杯预赛java本科组试题)
- ny24 素数距离的问题 筛选法求素数
- HashSet重复标准_重复判断的问题,颜色形同,坐标点距离不超过2,则认为是同一个点对象
- 素数距离问题
- nyoj_24 素数距离问题
- nyoj 素数距离问题
- NYOJ-素数距离问题
- 素数距离问题
- 【NYOJ】[24]素数距离问题
- 素数距离问题
- 素数最短距离问题