Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<iostream>
- #include<bits/stdc++.h>
- using namespace std;
- #define M 1010
- int nprime=0;
- bool mark[M];
- vector<int>prime;
- void primegen()
- {
- int i,j;
- mark[1]=false;
- mark[2]=false;
- prime.push_back(1);
- nprime++;
- prime.push_back(2);
- nprime++;
- for(i=3;i<=1001;i+=2)
- {
- if(mark[i]==false)
- {
- prime.push_back(i);
- nprime++;
- }
- for(j=i*i;j<=1001;j+=2*i)
- {
- mark[j]=true;
- }
- }
- }
- void myfunc(int n,int k,int c)
- {
- int i;
- if(n==c)
- {
- printf("%d %d: ",n,c);
- for(i=0;prime[i]<=n;i++)
- printf("%d ",prime[i]);
- cout<<endl;
- return ;
- }
- else if(k%2==0)
- {
- int count=0;
- printf("%d %d: ",n,c);
- for(i=(k/2-c)+1; ;i++)
- {
- printf("%d ",prime[i-1]);
- count++;
- if(count==2*c)
- {
- printf("\n");
- break;
- }
- }
- }
- else
- {
- int count=0;
- printf("%d %d: ",n,c);
- for(i=k/2-c+1; ;i++)
- {
- printf("%d ",prime[i]);
- count++;
- if(count==2*c-1)
- {
- cout<<endl;
- break;
- }
- }
- }
- }
- int binary(int n)
- {
- int high,low,mid;
- high=prime.size()-1;
- low=0;
- while(high>=low)
- {
- mid=(high+low)/2;
- if(prime[mid]<=n && prime[mid+1]>n) return mid;
- else if(prime[mid]>n)
- {
- high=mid-1;
- }
- else
- {
- low=mid+1;
- }
- }
- }
- int main()
- {
- int n,c,k;
- primegen();
- while(scanf("%d %d",&n,&c) && n!=EOF)
- {
- k=1+binary(n);
- myfunc(n,k,c);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment