poj3282

时间:2023-12-28 11:54:32

定义一个有4x+1组成的无限集合x>0&x∈Z

素数   x 不能有x = y*z,y,z都是素数

合数 x 有x = y*z y|z中某个数是素数

simi数,只能由两个素数构成。

打表

#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
const int maxa =;
int a[maxa]; //prime 0, composites 1;
int b[maxa]; //simi
int ans[maxa];
int main(){
for(int i = ; *i+ < maxa; i++){
if(a[*i+] == ){//printf("%d ",4*i+1);
for(int k = ; (k*+)*(i*+) < maxa; k ++){
a[(k*+)*(i*+)] = ;
}
}
}
for(int i = ;i < maxa; i+= ){
if(a[i] == ){
for(int k = ; k*i < maxa; k+=){
if(a[k] == ){
b[i*k] = ;
}
}
}
}
for(int i = ; i < maxa; i++){
ans[i] = ans[i-]+b[i];
}
int n;
while(scanf("%d", &n) , n){
printf("%d %d\n", n, ans[n]);
}
}

相关文章