【UVA - 1644 / POJ - 3518】Prime Gap(水题)
2024-09-06 10:03:36
Prime Gap
这里直接写中文了
Descriptions:
对于一个数n,若n为素数则输出0,否则找到距离n最小的两个素数,一个大于n,一个小于n,输出他们的差(正数)
Input
多组输入
每行包含一个数n
若n为0,程序结束
Output
对于每个测试数据,输出一个答案占一行
Sample Input
10
11
27
2
492170
0
Sample Output
4
0
6
0
114
题目链接:
https://vjudge.net/problem/UVA-1644
水题,先求质数表,预先处理出质数,然后输入n,若n为质数,输出0,若不为,可从第2个质数往后扫,当出现第一个大于n的数时,即可将他减去上一个质数,即为答案。
AC代码
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#define mod 1000000007
#define eps 1e-6
#define ll long long
#define INF 0x3f3f3f3f
#define ME0(x) memset(x,0,sizeof(x))
using namespace std;
int T;
int n;
int isprime[];//判断这里面哪个数是素数
int ans[];//把素数全部存进一个数组,方便查找
void eratos(int x)//求素数表
{
for(int i=; i<=x; ++i)
isprime[i]=true;
isprime[]=isprime[]=false;
for(int i=; i<=x; ++i)
{
if(isprime[i])
{
int j=i+i;
while(j<=x)
{
isprime[j]=false;
j+=i;
}
}
}
}
void solve()
{
if(isprime[n])
{
cout<<<<endl;
return;
}
else
{
for(int i=; ;++i)
{
if(ans[i]<n&&ans[i+]>n)
{
cout<<ans[i+]-ans[i]<<endl;
return;
}
} }
}
int main()
{
int j=-;
eratos();
for(int i=; i<=; ++i)
if(isprime[i])
ans[++j]=i;
// for(int i=0; i<=10; ++i)
// cout<<ans[i]<<endl;
while(cin>>n,n)
{
solve();
}
}
最新文章
- linux常用命名复习
- java中判断一个字符串是否“都为数字”和“是否包含数字”和“截取数字”
- JavaScript的Eval与JSON.parse的区别
- 【BZOJ】1251: 序列终结者(splay)
- ASP.NET MVC3在页面上获取当前控制器名称、Action名称以及路由参数
- haskell Types 和 Typeclasses
- 足球3v3心得
- Tomcat在Linux上安装
- 【Java每日一题】20170113
- POJ 1743 不可重叠的最长重复子串
- js正则表达式之人民币匹配
- nn.ReLU(inplace=True)中inplace的作用
- BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server)
- 后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况,以及解决方案
- 内存proc详解
- java 泛型 checkcast
- Magpie
- display_css
- C#不用union,而是有更好的方式实现
- windows和Ubantu双系统安装图解