POJ 3292Semi-prime H-numbers

mac2022-06-30  129

这个题有可能会错意啊,大家要注意……

题目大意:

定义一种数叫H-numbers,它是所有能除以四余一的数。

H-numbers中分三种数:

1、H-primes,这种数只能被1和它本身整除,不能被其他的H-number整除,例如9是一个H-number,能被1,3,9整除,但3不是H-number,所以他是H-primes。

2、H-semi-primes是由两个H-primes相乘得出的。

3、剩下的是H-composite。

问给一个数,求1到这个数之间有多少个H-semi-primes。

解题思路:

像筛素数一样打个表就行……,注意细节

下面是代码:

#include <stdio.h> #include <string.h> #define N 1000500 int num[40],pri[N],prc=0; int vis[N+5]= {false}; void ScreeningPrime() { int i, j; for(i = 5; i <= N; i+=4) { for(j = 5; j <= N ;j+=4) { if(i*j>N) { break; } if(!vis[i]&&!vis[j]) { vis[i*j]=1; } else { vis[i*j]=-1; } } } prc=0; for(i=1; i<N; i++) { if(vis[i]==1) { prc++; } pri[i]=prc; } } int main() { int l; ScreeningPrime(); while(scanf("%d",&l),l) { printf("%d %d\n",l,pri[l]); } return 0; }

转载于:https://www.cnblogs.com/lin375691011/p/3996715.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)