Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h>
- #include <math.h>
- #include <string.h>
- #include <assert.h>
- #pragma warning(disable:4996)
- typedef long long LL;
- int primes[10000010] = {0};//primes[0]计数
- int vis[10000010] = {0};
- void initprimes(int *primetable,int *visit,int n){
- int i,j;
- for(i = 2;i <= n;i++){
- if(!visit[i]){
- primetable[++primetable[0]] = i;
- }
- for(j = 1;j <= primetable[0] && i * primetable[j] <= n;j++){
- vis[i * primes[j]] = 1;
- if(i % primes[j] == 0)break;
- }
- }
- }
- void *lowerbound(void *base,void *key,size_t count,size_t itemsize,int(*compare)(const void *,const void *)){
- assert(base && compare);
- size_t lo = 0,hi = count - 1,mid = 0;
- if(compare(key,(char *)base + hi * itemsize) > 0){
- return (char *)base + count * itemsize;
- }
- char *pmid = 0;
- while(lo < hi){
- mid = (lo + hi) >> 1;
- pmid = ((char *)base) + mid * itemsize;
- if(compare(pmid,key) < 0){
- lo = mid + 1;
- }
- else{
- hi = mid;
- }
- }
- return (char *)base + lo * itemsize;
- }
- void *upperbound(void *base,void *key,size_t count,size_t itemsize,int(*compare)(const void *,const void *)){
- assert(base && compare);
- size_t lo = 0,hi = count - 1,mid;
- if(compare(key,(char *)base + hi * itemsize) >= 0){
- return (char *)base + count * itemsize;
- }
- char *pmid = 0;
- while(lo < hi){
- mid = (lo + hi) >> 1;
- char *pmid = ((char *)base) + mid * itemsize;
- if(compare(pmid,key) <= 0){
- lo = mid + 1;
- }
- else{
- hi = mid;
- }
- }
- return (char *)base + lo * itemsize;
- }
- int cmp(const void *a,const void *b){
- int p = *(int *)a,q = *(int *)b;
- if(p > q)return 1;
- else if(p < q)return -1;
- else return 0;
- }
- int main(){
- #ifdef _DEBUG
- freopen("input.txt","r",stdin);
- #ifdef OFILE
- freopen("test.txt","w",stdout);
- #endif
- #endif
- int n;
- initprimes(primes,vis,10000000);
- while(~scanf("%d",&n)){
- int pos = (int *)upperbound(primes + 1,&n,primes[0],sizeof(int),cmp) - primes - 1;
- printf("%d\n",pos);
- }
- #ifdef _DEBUG
- freopen("CON","r",stdin);
- #ifdef OFILE
- freopen("CON","w",stdout);
- #endif
- system("pause");
- #endif
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement