Assalomu alaykum, yordam.uz saytimizga xush kelibsiz.
Bu saytda o`zingizni qiziqtirgan savollarga javob olishingiz va o`z sohangiz bo`yicha savollarga javob berishingiz mumkin. Bizning Oilamizga a'zo bo`lganingiz uchun chuqur Minnatdorchilik bildiramiz !!!

Tub sonlarni topish algoritmi

+4 ovoz
5,309 marta ko‘rilgan
so‘radi 27 dekabr, 16 Axrorxo'ja (743 bal)

Assalom alaykum

Tub sonlarni topish bo'yicha optimalroq algaritmlar kerak, eng birinchi shunaqa algoritm keldi 

public static void main(String[] args) throws IOException
            {
                int k = 0;
                for (int i = 3; i < 100; i++)
                    {
                        for (int j = 2; j < i; j++)
                            {
                                if (i % j == 0)
                                    {
                                        k++;
                                        break;
                                    }
                            }
                        if (k != 0) System.out.println(i + " tub son");
                        else System.out.println(i + " tub son emas");
                    }
            }

5 Javoblar

+3 ovoz
javob berdi 27 dekabr, 16 Baron (862 bal)
tanlangan 28 dekabr, 16 Axrorxo'ja
 
Eng yaxshi javob

"Решето Эратосфена" (Eratosfen g'alviri) eng tezkor algoritm hisoblanadi.

import java.util.Arrays;
...
int n=100000;
boolean[] tublar=new boolean[n+1];

Arrays.fill(tublar,true);
tublar[0]=tublar[1]=false;
for (int i=2;i<tublar.length;i++) {
    if(tublar[i]) {
        for (int j=2;i*j<tublar.length;j++) {
            tublar[i*j]=false;
        }
    }
}

for (int i=0;i<tublar.length;i++)
	if (tublar[i]==true) System.out.println(i);

Ishlash prinsipi:

  1. 2 dan biror N gacha bo'lgan barcha sonlar yozib chiqiladi.
  2. p - birinchi tub son bo'lsin (p = 2).
  3. 2p dan n gacha p qadam bilan barcha sonlar o'chiriladi (ya'ni p ga karrali sonlar).
  4. p dan keyingi birinchi o'chirilmagan son p ga yuklanadi, agar unday son mavjud bo'lmasa ish to'xtatiladi.
  5. 3- va 4- qadam davom ettiriladi.

Barcha o'chirilmagan sonlar 2 dan n gacha bo'lgan tub sonlar.

Eratosfen G'alviri

izoh qoldirdi 27 dekabr, 16 Baron (862 bal)
Shuningdek, https://habrahabr.ru/post/122538/ ni o'qib chiqishni ham tavsiya qilaman
izoh qoldirdi 28 dekabr, 16 Axrorxo'ja (743 bal)
faqat oxirida  if (tublar[i]==true) System.out.println(i);
mas if (tublar[i]) System.out.println(i);
qisez ham bo'ladi
+3 ovoz
javob berdi 27 dekabr, 16 abdujabbor (399 bal)

manimcha buning uchun eng yaxshi algoritmlarni bittasi bu Resheto Eratosfen bo'sa kere mana bu realizasiyasi

import math
n = 100
a = [1] * n
a[0] = 0
a[1] = 0
sqrt_n = int(math.sqrt(n))

for i in range(2, sqrt_n + 1):
	for j in range(i, n, i):
		if i == j:
			continue
		a[j] = 0

for i in range(n):
    if a[i]:
        print(i)

+1 ovoz
javob berdi 11 fevral, 17 Jahongir Soataliyev (260 bal)
tahrirlandi 12 fevral, 17 Saidolim

yana bir yechim:

boolean[] primers = new boolean[2000000];
        for (int i = 0; i < primers.length; i++) {
            primers[i] = true;
        }
        primers[0] = primers[1] = false;
        for (int i = 2; i < primers.length; i++) {
            if (primers[i]) {
                for (int j = i + i; j < primers.length; j += i) {
                    primers[j] = false;
                }
            }
        }
        int s = 0;
        for (int i = 0; i < primers.length; i++) {
            if (primers[i]) {
                System.out.print(primers[i]);
            }
        }
+1 ovoz
javob berdi 12 fevral, 17 FAXRIDDIN TOJIBOYEV (306 bal)
tahrirlandi 12 fevral, 17 Saidolim
#include <iostream>
using namespace std;
int main ()
{
   int n, j;
   cin>>n;
   for(j=2; j<=n/2; j++){
       if(n%j==0){ cout<<"\nBu son tub son emas";
    break; }
    else if(j==n/2) cout<<"\nBu son tub";}
    return 0;
}
izoh qoldirdi 12 fevral, 17 Saidolim (3,566 bal)
savol java ga tegishli ekan.
0 ovoz
javob berdi 21 noyabr Azizjon creator (5 bal)

n=int(input("n= "))

i=1

while i<=n:

     s=0

     j=1

while j<=i:

    if i%j==0:

         s+=1

    j+=1

if s==2:

    print(i, end=' ')

i+=1

bu python while siklida n ta berilgan sonlar ichida tub sonlarni topish

Assalomu alaykum, yordam.uz saytimizga xush kelibsiz.

Bu saytda o`zingizni qiziqtirgan savollarga javob olishingiz va o`z sohangiz bo`yicha savollarga javob berishingiz mumkin.

Bizning Oilamizga a'zo bo`lganingiz uchun chuqur Minnatdorchilik bildiramiz !!!

Telegram kanal YordamUzRss

...