Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

c++ sorum- ilk birkaç perfect number bulma


pontipati919

Öne çıkan mesajlar

selam, başlıkta dediğim gibi bir program yazmak istiyorum.
perfect number, bölenlerinin toplamı o sayıya eşit olan sayılar. mesela 6; bölenleri 1,2,3.
1+2+3 = 6 .. diye gidiyorlar(6'nın kendisini bölen olarak almıyoruz)
şimdi bu sayılar p asal sayı ise, (2^(p−1)) * (2^p −1) formatında. boldlu kısım asal sayı olmak zorunda. 2^p - 1 formundaki asal sayılara da mersenne sayıları deniyor falan.
ben de programda asal sayıların old. bi array tanımladım önce. sonra bu mersenne sayılarını bulup bi arraya koymaya çalıştım(yapamamış olabilirim.)
sonuç olarak perfect numberlar mersenne arrayinin elemanları ile ile diğer çarpanın çarpımıdır demem lazım.

kod

said:
#include
#include
#include


using namespace std;
double asal(int n) ;
int mersenne(int a[],int n) ;
int main(int argc, char *argv[])
{

double pnumbers[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,47};
const int SIZE = 10;

double mersenne[SIZE] ;

cout << "how many perfects do you want ? : " ;
int n; cin >> n;
cout << endl;



for (int i = 0 ; i < n ; i++) {
if (asal(pow(2,pnumbers[i])-1) == true)
mersenne[i] = (pow(2,pnumbers[i])-1)*(pow(2,(pnumbers[i]-1))) ;
i = i+1;
}

cout << " " << endl;

for (int i = 0; i cout << mersenne[i] << " " << endl;
cout << endl;


system("PAUSE");
return EXIT_SUCCESS;
}



double asal(int n) {
// int n;
int d=2;

// cout << " n? "; cin >>n;

bool is_prime = !(n%d==0);

if(n==2)
is_prime = true;
else

while( n%d>0 && d<=sqrt(n) ) {

d++;

if(n%d==0)
is_prime = false;

}


programda mersenne[], mersenne sayılarının arrayi, isprime da bu mersenne sayılarını bulmak için kullandığım asal sayı test fonksiyonu.

daha acemiyim beyler yardım plz
Link to comment
Sosyal ağlarda paylaş

teşekkür ederim.

said:

for (int i = 0 ; i < n ; i++) {
if (asal(pow(2,pnumbers[i])-1) == true)
mersenne[i] = (pow(2,pnumbers[i])-1)*(pow(2,(pnumbers[i]-1))) ;
i = i+1;
}


hala "[Warning] passing `double' for converting 1 of `int asal(int)' " uyarısı alıyorum, boldlu satırda.
ha bu arada program çalışıyor gibi, fakat mesela ben ilk 5 perf. sayıyı istediğimde
7.29112e-304
3.39519e-313
6.95089e-308
6.95224e-308
3.266565e-299

sayılarını veriyor. lakin ilk 5'i 6,28,496,8128,33550336 iken. bu sayılar çabuk büyüyor , long falan yetmiyor bi ayar daha lazım :(
Link to comment
Sosyal ağlarda paylaş

nerdeyse bitti son sorum patiler

şimdi elimde mersenne[] arrayi var. bundaki asalları seçip yeni bi array oluşturmak istiyorum newmer[] diye. şöyle bişey yazdım, aşağıdaki asal testini kullanarak, hatam nerdedir yardım plx

http://oi41.tinypic.com/2ypd9ci.jpg






primality test func

said:


bool IsPrime(unsigned int number) {
if (number <= 1) return 0; // zero and one are not prime
unsigned int i;
for (i=2; i*i<=number; i++) {
if (number % i == 0) return false;
}
return true;
}


Link to comment
Sosyal ağlarda paylaş

newmer_i 'ler
3, 7, 31, 127, 8, 8191, 131071, 524287, 0, 8192336, ..

mersenne_i'ler
3, 7, 31, 127, 2047, 8191, 131071, 524287, 8388607, 536870911 ..

diye gidiyor lel :D

yalnız hala
mersenne_i = pow(2,pnumbers_i)-1 ; pnumbers başka bi array
satırında

" [Warning] converting to `long unsigned int' from `double' "
uyarısı var program çalışmasına rağmen
Link to comment
Sosyal ağlarda paylaş

Fly said:

isprime false true donebilir, ona gore yeni listeyi dolduruyorsun
iterator olarak kullandigin i ise her daim artiyor

dolmuyor derken nasil dolmuyor

mersenne[.]={3,7,31,127,2047,,,} diye gidiyor. bunun içinden asal olanları alıp newmer[.] = {3,7,31,127,8191,,} tanımlamam gerekiyor.
mesela mersenne'de 2047 asal değil, o yüzden onu almıyorum. 2047 den sonra gelen ilk asal olan eleman 8191 miş onu alıyorum. yani böyle tanımlamam gerekiyor newmer'i.
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...