在两个连续素数p和p + n之间的n−1连续合数(非素数、不等于1的正整数)序列称为长度为n的素数间隙,如:<24、25、26、27、28>在23和29之间是长度为6的主要差距。 你的任务是编写一个程序来计算一个给定的正整数k,包含k的质数间隙的长度。为了方便,在没有质数间隙包含k的情况下,这个长度被认为是0。
输入格式:
输入是一个行序列,每个行包含一个正整数。每个正整数都大于1且小于或等于第10万个素数1299709。 输入的结束由包含一个0的行表示。
输出格式:
输出应该由每行包含一个非负整数组成。如果是合数,则为输入中包含相应正整数的素数间隙的长度,否则为0。输出中不应该出现其他字符。
输入样例:
1. 10 2. 11 3. 27 4. 2 5. 492170 6. 0
输出样例:
1. 4 2. 0 3. 6 4. 0 5. 114
#include<bits/stdc++.h> using namespace std; bool is_prime(int n) { if(n < 2) return false; for(int i=2;i<=n/i;i++) if(n % i == 0) return false; return true; } int main() { int n; while(cin>>n && n) { int s1,s2; for(int i=n;;i++) { if(is_prime(i)) { s2 = i; break; } } for(int i=n;i>1;i--) { if(is_prime(i)) { s1 = i; break; } } cout<<s2-s1<<endl; } return 0; }