/**Bismillahir Rahmanir Rahim.**/ #include <bits/stdc++.h> using namespace std; int prime[100], x, final_prime[100], y; void seivePrime(char prime_b[], int b) { prime_b[1]=1; int till = sqrt(b+1); for(int i=4; i<=till; i+=2) prime_b[i] = 1; int limit = sqrt(till)+1; for(int i=3; i<=limit; i+=2) { if(!prime_b[i]) { for(int j=i*i; j<=till; j+=(i*2)) prime_b[j] = 1; } } prime[0] = 2; for(int i=3; i<=till; i+=2) if(!prime_b[i]) prime[++x] = i; } void segment_prime(int A, int B) { if(A==1) A+=1; char segment[B-A+1]; memset(segment, 0, sizeof(segment)); for(int i=0; i<x; i++) { int start = prime[i]*prime[i]; if(start<A) start = ((A+prime[i]-1)/prime[i])*prime[i]; for(; start<=B; start += prime[i]) segment[start-A] = 1; } if(A == 2) final_prime[y++] = 2; int j=A+1; if(A%2) j=A; for(; j<=B; j+=2) if(!segment[j-A]) final_prime[y++] = j; } int main() { int a = 100, b = 1000; char prime_b[123]; memset(prime_b, 0, sizeof(prime_b)); seivePrime(prime_b, b); segment_prime(a, b); for(int i=0; i<y; i++) printf("%d ", final_prime[i]); return 0; }
সেগমেন্টেড সীভ (Segmented Sieve)
Standard
দুইটি সংখ্যা A আর B দেওয়া আছে (A<B)। A থেকে B পর্যন্ত প্রাইম নাম্বার গুলো প্রিন্ট করতে হবে। A = 100, B = 1000 এর জন্য নিচের কোড করা হল।