[c++] Liczby pierwsze

0

Mam drobny problem z pokazywaniem liczb pierwszych do określonej granicy wpisanej przez użytkownika. Mam taki kod:

 int lp;
 int x = 1;
 int y;
 int do;

cout << "Wpisz granicę liczb pierwszych: ";
cin >> do;
cout << endl;

  if (lp == lp/x & lp == x/y)
  {
         for(lp = 3; lp <= do; lp++)
         {
           cout << lp << endl;        
         }    

}

Ale on jest zły i był bym wdzięczny za podanie mi dobrego lub poprawienie tego.

0

Witam!

Nie wiem czy dobrze rozumiem ale to chyba nie jest całość kodu. A co do błędów to wydaje mi się :

  1. Słowo
do

jest zastrzeżone i nie można go używać jako nazwy zmiennej
2.Nie widzę tu nigdzie na początku inicjalizacji "lp" i "y" także przy dzieleniu przez "y" ??? ale możliwe że robisz to gdzieś wcześniej rzuć więcej kodu..
3. Operator

&

to operator bitowy a z tego co rozumiem to tobie raczej chodziło o &&



pozdr. kain_z
0

Jest jeszcze błąd w samym pomyśle na algorytm
Twoje rozwiązanie ma konstrukcję:

if
for

i złożoność obliczeniową O(n) co jest podejrzanie szybko gdyż typowe rozwiązanie ma złożoność obliczeniową rzędu O(n^2) oraz schemat:

for
for
if

Szczegóły (nie kompilowałem) :

for (lp=1;lp<=granica;lp++)
  for (x=2;x<lp;x++) {
    if (!lp%x) break;
    if (x==lp-1) cout<<lp<<endl;
  }

... a jaką złożoność obliczeniową ma najlepsze rozwiązanie ?
pozdrawiam

0
MitS napisał(a)

Mam drobny problem z pokazywaniem liczb pierwszych do określonej granicy wpisanej przez użytkownika. Mam taki kod:

 int lp;
 int x = 1;
 int y;
 int do;

cout << "Wpisz granicę liczb pierwszych: ";
cin >> do;
cout << endl;

  if (lp == lp/x & lp == x/y)                   // ten warunek jest nie do przyjecia brak wartosci poczatkowej 
                                              lp  spowoduje ze glupoty ci wyjda
  {
         for(lp = 3; lp <= do; lp++)
         {
           cout << lp << endl;        
         }    

}

Ale on jest zły i był bym wdzięczny za podanie mi dobrego lub poprawienie tego.

w ogóle to wez sprecyzuj co chcesz osiagnac to zobacze co sie da zrobic

0

Chodzi mi o to że chcĘ by program wypisał mi wszystkie liczby pierwsze do pewnej granicy np. 200.

liczba pierwsza to liczba, która dzieli się przez jeden i samą siebie.

Niestety kod poniższy wypisuje mi wszystkie liczby od 1 do 200


int lp;
int x;
int y;
int do1; 
 
cout << "Wpisz granicę liczb pierwszych: ";
cin >> do1;
cout << endl;
 
 for (lp = 1; lp <= do1; lp++)
 for (x = 2; x < lp; x++) 
 {
 if (!lp%x) 
 break;
 if (x==lp-1) 
 cout << lp << endl;
 
 
 
} 

A jak zrobić by wypisywał tylko pierwsze czyli np. 1, 3, 5, 7, 13, 17 itd .. ??

0

Napisałem kod w samym C wypisujący liczby pierwsze oto on:
#include<stdio.h>

int n,i,a;

int main()
{
printf("Podaj granice liczb pierwszych\n");
scanf("%d",&n);
if(n==1)
{
printf("1");
return 0;
}
if(n==0)
{
return 0;
}
if(n>1)
{
printf("1,");
i=2;
for(i=2;i<=n;i++)
{
for(a=2;a<=i;a++)
{
if((a!=i)&&((i%a)==0))
{
break;
}
if(a==i)
{
printf("%d, ",i);
}
}
}
return 0;
}
}

0

Leć po falszke

//---------------------------------------------------------------------------
#include <iostream>
#include <conio.h>
#include <math.h>

bool pierwsza(int k)
{
int dzielnik;
dzielnik=2;
  while (  ((k % dzielnik) != 0) && ((dzielnik <= sqrt(k))) )
    dzielnik++;

  if (dzielnik>sqrt(k))
    return true;
    return false;
}
//---------------------------------------------------------------------------
using namespace std;

int main(int argc, char* argv[])
{
bool hm;
cout<<"Przedzial  <1;200> tak jak chciales\n";

for(int w=1;w<200;w++)
   {
   hm=false;
   hm=pierwsza(w);
   if(hm)  cout<<w<<" ";
   }
   getch();
   return 0;
}
//---------------------------------------------------------------------------
0

faktycznie ... warunek

if(!lp%x)

nie zadziałał tak jak tego oczekiwałem i po zmianie wszystko jest *prawie ok:

for (lp=1;lp<=granica;lp++)
  for (x=2;x<lp;x++) {
    if (lp%x==0) break;
    if (x==lp-1) cout<<lp<<endl;
  }

pozdrawiam
*dwójka nie jest wyświetlana ale proponuję to obsłużyć przed pętlą

0
Kapustka napisał(a)

warunek

if(!lp%x)

nie zadziałał tak jak tego oczekiwałem

No a nie zadzialal bo powiinno byc if(!(lp%x))

0

Dzięki gesiek20 oto mi chodziło :)

twój kod BąQ też działa ...

Kiedyś się odwdzięczę ;P ;P ;P

0

a nie latwiej zastosowac sito erastotenesa?

0

A jak zrobić by wypisywał tylko pierwsze czyli 1, 3, 5, 7, 13, 17 itd

1 nie jest liczbą pierwszą, za to 2 nią jest ;) .</quote>

1 użytkowników online, w tym zalogowanych: 0, gości: 1