Legend
For a given integer n ≤ 4 ⋅ 104, find all positive integers k ≤ n such that k2=p1 ⋅ p2+1, where p1 and p2are primes.
Input format
The first line of input contains one integer n (4 ≤ n ≤ 4 ⋅ 104).
Output format
Print all appropriate values of k in arbitrary order. Separate consecutive values by spaces and/or newlines.
Sample 1
Input | Output |
---|---|
4 | 4 |
Sample 2
Input | Output |
---|---|
10 | 4 6 |
------------------------------------------------------------------------------------------------------------------------------%
------------------------------------------------------------------------------------------------------------------------------%
题意: k2=p1 ⋅ p2+1,输出小于 n 的所有 k 值。
很简单的一道题,打表让我打坏了,只能搜模板了。搜到一个不错的模板。
8<--------------------------------------------------------------------------------------------------------------------------%
#include<stdio.h>
#include<math.h>
#include<string.h>
#define MAX_NUMBER 40010
int prime_number = 0;
int prime[MAX_NUMBER];
int ans[MAX_NUMBER];
void getPrime() {
prime[++prime_number] = 2;
for (int i = 3; i <= MAX_NUMBER; i++) {
int j;
for (j = 1; prime[j] * prime[j] <= i; j++) {
if (i % prime[j] == 0) {
break;
}
}
if (prime[j] * prime[j] > i) {
prime[++prime_number] = i;
}
}
}
int main(){
int n;
int cnt = 0;
getPrime();
for(int i=1; i<prime_number; i++){
if(prime[i]+2==prime[i+1])
ans[cnt++] = prime[i]+1;
}
while(scanf("%d", &n) != EOF){
for(int i=0; i<cnt; i++){
if(ans[i] <= n)
printf("%d\n", ans[i]);
else break;
}
}
return 0;
}