Hướng dẫn giải của Tìm số nguyên tố
Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Lưu ý: Các code mẫu dưới đây chỉ mang tính tham khảo và có thể không AC được bài tập này
Code mẫu của flashmt
var a,b,i,j,k:longint; d:array[1..200000] of boolean; begin read(a,b); k:=trunc(sqrt(b)); for i:=1 to k shr 1 do if not d[i shl 1+1] then begin j:=(i shl 1+1)*3; while j<=b do begin d[j]:=true; j:=j+(i shl 1+1) shl 1; end; end; d[1]:=true; for i:=a to b do if (i=2) or (odd(i) and not d[i]) then writeln(i); end.
Code mẫu của happyboy99x
import java.util.Scanner; public class Main { public static void main( String[] argv ) { boolean pr[] = new boolean[200005]; Scanner scan = new Scanner(System.in); int a = scan.nextInt(), b = scan.nextInt(); scan.close(); for( int i = 2; i <= 200000; ++i ) pr[i] = true; for( int i = 2; i * i <= 200000; ++i ) { if ( !pr[i] ) continue; for( int j = i + i; j <= 200000; j += i ) pr[j] = false; } for( int i = a; i <= b; ++i ) if (pr[i]) System.out.println(i); } }
Code mẫu của ladpro98
#include <iostream> #include <cmath> using namespace std; int main() { int a, b; cin>>a>>b; bool f[200005]; for (int i = 2; i<=b; i++) f[i]=true; f[1]=false; int can = floor(sqrt(b)); int i = 2; while (i<=can) { if (f[i]) { int j = i+i; while (j<=b) { f[j] = false; j += i; } i++; }else { i++; } } for(int i = a; i<=b; i++) if (f[i]) printf("%d\n", i); return 0; }
Code mẫu của RR
a = raw_input().split() L = int(a[0]) R = int(a[1]) sieve = [0] * (R + 11) for i in range(2,500): if i == R: break; if sieve[i] == 0: j = i*i while j <= R: sieve[j] = 1 j += i sieve[0] = sieve[1] = 1 for i in range(L, R + 1): if sieve[i] == 0: print i
Code mẫu của hieult
#include<stdio.h> #include<math.h> main() { long n,m,t; scanf("%ld %ld",&m,&n); for(long j=m;j<=n;j++) { if(j==1) continue; t=0; for(long i=2;i<=sqrt(j);i++) { if(j%i==0) { t++; break; } } if(t==0) printf("%ld\n",j); } }
Code mẫu của ll931110
Program PNUMBER; Const input = ''; output = ''; Var a,b: longint; x: array[1..200000] of integer; Procedure init; Var f: text; Begin Assign(f, input); Reset(f); Readln(f, a, b); Close(f); Fillchar(x, sizeof(x), 0); x[1]:= 1; End; Procedure prime; Var f: text; i,k: longint; Begin For i:= 2 to trunc(sqrt(b)) do If x[i] = 0 then Begin k:= 2; While k * i <= b do Begin inc(x[k * i]); inc(k); End; End; Assign(f, output); Rewrite(f); For i:= a to b do if x[i] = 0 then writeln(f, i); Close(f); End; Begin init; prime; End.
Code mẫu của skyvn97
#include<stdio.h> #define MAX 250000 long a,b,i; bool prime[MAX+1]; void eratosthene(void) { long i,j; prime[0]=true; prime[1]=true; for (i=2;i*i<=MAX;i=i+1) if (!prime[i]) for (j=2*i;j<=MAX;j=j+i) prime[j]=true; } int main(void) { eratosthene(); scanf("%ld",&a); scanf("%ld",&b); for (i=a;i<=b;i=i+1) { if (!prime[i]) printf("%ld\n",i); } }
Code mẫu của khuc_tuan
import psyco ; psyco.jit() from psyco.classes import * def main(): A,B=[int(x) for x in raw_input().split()] mark=[False for x in range(B+1)] for x in range(2,B+1): if not mark[x]: if x>=A: print x for y in range(x+x,B+1,x): mark[y]=True psyco.bind(main) # or method, class newname = psyco.proxy(main) newname()
Bình luận
import math def checkprime(n): for i in range(2, int(math.sqrt(n))+1): if n % i == 0: return False return True a, b = map(int, input().split()) for i in range(a, b+1): if checkprime(i) == True and i != 1: print(i)
include <bits/stdc++.h>
using namespace std; const int maxn = 1e6 + 5; int n , a[maxn] ; bool prime[maxn]; void sieve() { memset(prime , true , sizeof prime); prime[0] = prime[1] = false; for (int i = 2; ii <= 1000000 ; i++) if(prime[i]) for (int j = i i ; j <= 1000000 ; j+=i) prime[j] = false; } int main() { sieve(); int l , r; cin >> l >> r; for (int i = l ; i<= r ; i++) { if(prime[i]) cout << i << endl; } }