PDA

View Full Version : سوال: Almost Prime



maryam9903
چهارشنبه 20 اسفند 1393, 20:38 عصر
با سلام
Almost Prime یعنی عددی که به جز خودش و یک , فقط و فقط 2 تا مقسوم علیه داره و آن دوتا مقسوم علیه حتما و حتما عددهای اول هستندو این دوعدد نباید تکراری باشند
مثلا 6 و 18 و 24 عددهایی هستند که بهشون Almost Prime میگیم.ولی عددهایی مثل4و9و8و42وAlmost Primeنیستند
عدد 6 رو در نظر بگیرید!به جز خودش و یک فقط و فقط 2 تا مقسوم علیه دیگه داره که 2 و 3 هستند
ولی عدد9 درسته که به جز خودش و یک فقط و فقط 2 تا مقسوم علیه دیگه داره ولی اون عدد 3 ودرسته که عدد3 عددی اول است ولی تکراری است و 9 Almost Prime محسوب نمیشود

-------------
امیدوارم سوالم رو خوب توجیه کرده باشم
برای این سوال خودم یه کد زدم ولی جواب نمیده
نمیدونمم که اشالش کجاست
ممنون میشم کمکم کنید و بگید اشکاله کارم تو کدوم قسمته




#include <iostream>
using namespace std;
int main()
{
int a,b,i,sum;
b=0;sum=0;
cin>>a;
for(i=6;i<=a;i++)
{
for(int j=2;j<=i/2;i++)
{
if (i%j==0)
if(aval(j)==1)
b++;
if(b==2)
sum++;
}
b=0;
}
cout<<sum;


}
////////////////
int aval(int j)
{
int i,s=0;
for(i=1;i<=j;i++)
if(j%i==0)
s++;
if(s==2)
return 1;
else return 0;
}

maryam9903
پنج شنبه 21 اسفند 1393, 22:37 عصر
یعنی واقعا هیچکس نمیتونه کمکم کنه!؟

rahnema1
پنج شنبه 21 اسفند 1393, 23:24 عصر
سلام
عدد ورودی را اسمش میذاریم a
لازمه ابتدا اولین عددی که a به اون بخشپذیر هست را از بین اعداد اول بین 2 تا جذر a پیدا کنید
اگه همچین عددی یافت نشد پس a عددی almost prime نیست
حالا اگه عددی یافت شد، عدد یافته شده اسمش را میذاریم b
اگه a قابل تقسیم به b^2 بود در نتیجه a عددی almost prime نیست
در غیر این صورت a را تقسیم بر b می کنیم و عدد به دست آمده را اسمش میذاریم c
حالا بررسی می کنیم c اول هست یا نه اگه اول بود پس a عددی almost prime می باشد در غیر این صورت almost prime نیست

maryam9903
جمعه 22 اسفند 1393, 15:59 عصر
سلام
عدد ورودی را اسمش میذاریم a
لازمه ابتدا اولین عددی که a به اون بخشپذیر هست را از بین اعداد اول بین 2 تا جذر a پیدا کنید
اگه همچین عددی یافت نشد پس a عددی almost prime نیست
حالا اگه عددی یافت شد، عدد یافته شده اسمش را میذاریم b
اگه a قابل تقسیم به b^2 بود در نتیجه a عددی almost prime نیست
در غیر این صورت a را تقسیم بر b می کنیم و عدد به دست آمده را اسمش میذاریم c
حالا بررسی می کنیم c اول هست یا نه اگه اول بود پس a عددی almost prime می باشد در غیر این صورت almost prime نیست

ممنون از راهنماییتون......سعی میکنم طبق راهنماییتون کد رو بزنم

maryam9903
جمعه 11 اردیبهشت 1394, 09:04 صبح
ممنون از راهنماییتون......سعی میکنم طبق راهنماییتون کد رو بزنم

سلام!
ببخشید تو خط دوم گفتین "تا جذر a"
دقیقا کده این قسمتو باید چجوری بنویسم؟!
1 قسمتی هم گفتین b^2.....کد این تیکه رو یاد ندارم
ممنون میشم کمک کنین

the_milad
جمعه 11 اردیبهشت 1394, 10:04 صبح
نکته ادبیاتی : کد رو نمی زنند! کد رو می نویسند!
#include <stdio.h>

int kprime(int n, int k)
{
int p, f = 0;
for (p = 2; f < k && p*p <= n; p++)
while (0 == n % p)
n /= p, f++;

return f + (n > 1) == k;
}

int main(void)
{
int i, c, k;

for (k = 1; k <= 5; k++) {
printf("k = %d:", k);

for (i = 2, c = 0; c < 10; i++)
if (kprime(i, k)) {
printf(" %d", i);
C++‎‎‎‎;
}

putchar('\n');
}

return 0;
}

maryam9903
جمعه 11 اردیبهشت 1394, 16:40 عصر
نکته ادبیاتی : کد رو نمی زنند! کد رو می نویسند!
#include <stdio.h>

int kprime(int n, int k)
{
int p, f = 0;
for (p = 2; f < k && p*p <= n; p++)
while (0 == n % p)
n /= p, f++;

return f + (n > 1) == k;
}

int main(void)
{
int i, c, k;

for (k = 1; k <= 5; k++) {
printf("k = %d:", k);

for (i = 2, c = 0; c < 10; i++)
if (kprime(i, k)) {
printf(" %d", i);
C++‎‎‎‎‎;
}

putchar('\n');
}

return 0;
}



ممنون از راهنماییتون ولی من printfرو یاد ندارم!

rahnema1
جمعه 11 اردیبهشت 1394, 21:16 عصر
سلام!
ببخشید تو خط دوم گفتین "تا جذر a"
دقیقا کده این قسمتو باید چجوری بنویسم؟!

سلام به این صورت جذر حساب کنید

#include <math.h>
double jazr = sqrt(a);



1 قسمتی هم گفتین b^2.....کد این تیکه رو یاد ندارم
ممنون میشم کمک کنین

منظورم تز علامت ^ علامت توان هست یعنی به توان 2
مثلا 5 به توان 2 میشه 5 * 5

maryam9903
شنبه 12 اردیبهشت 1394, 11:26 صبح
سلام به این صورت جذر حساب کنید

#include <math.h>
double jazr = sqrt(a);



منظورم تز علامت ^ علامت توان هست یعنی به توان 2
مثلا 5 به توان 2 میشه 5 * 5

آها ممنونم
1 سوال دیگه : چرا باید تا جذر a حساب کنیم؟
و میشه 1 توضیح کلی راجب این منطق بدین؟
ببخشید همش اذیتتون میکنم

rahnema1
شنبه 12 اردیبهشت 1394, 18:46 عصر
آها ممنونم
1 سوال دیگه : چرا باید تا جذر a حساب کنیم؟

شما هر عددی را در نظر بگیرید حداکثر عددی که عدد ما بهش بخشپذیره از جذر اون عدد بیشتر نمی شه
مثلا 9 را در نظر بگیرید. جذرش میشه 3 آیا 9 بر اعداد بزرگتر از 3 بخشپذیره؟


و میشه 1 توضیح کلی راجب این منطق بدین؟
ببخشید همش اذیتتون میکنم

من فعلا منطقش را توضیح نمیدم:) چون لذت حل مساله از دست میره!
فکر کنم شما بهتره توضیح بدید از چه منطقی استفاده بشه. راه حل (های) خوتون را بگید تا روی اونها بحث بشه

maryam9903
شنبه 12 اردیبهشت 1394, 19:37 عصر
شما هر عددی را در نظر بگیرید حداکثر عددی که عدد ما بهش بخشپذیره از جذر اون عدد بیشتر نمی شه
مثلا 9 را در نظر بگیرید. جذرش میشه 3 آیا 9 بر اعداد بزرگتر از 3 بخشپذیره؟


من فعلا منطقش را توضیح نمیدم:) چون لذت حل مساله از دست میره!
فکر کنم شما بهتره توضیح بدید از چه منطقی استفاده بشه. راه حل (های) خوتون را بگید تا روی اونها بحث بشه

من اون کدی که خودم نوشته بودم رو اصلاح کردم و درسته .حالا میخام با این منطق شما کد بزنم.ولی هنوزم با اون خط دوم مشکل دارم.نمیدونم باید چجوری بنویسم کدشو:افسرده:

این کده منه :


#include<iostream>
using namespace std;
int aval(int);
int main()
{
int a,b,i,j,sum;
b=0;sum=0;
cin>>a;
for(i=1;i<=a;i++,b=0)
{ for(j=2;j<=i/2;j++)
{
if(i%j==0)
if(aval(j)==1)
b++;

}
if(b==2)
sum++;
}
cout<<sum;
}


///////////////////////////
int aval (int j)
{int i,s=0;


for (i=1;i<=j;i++)
if(j%i==0)
s++;
if (s==2)
return 1;
else


return 0;
}

rahnema1
شنبه 12 اردیبهشت 1394, 21:57 عصر
اصلا شما خط دو را به این صورت تغییر بدید که کارتون راحت تر بشه:
لازمه ابتدا اولین عددی که a به اون بخشپذیر هست را از بین اعداد بین 2 تا a-1 پیدا کنید

maryam9903
شنبه 12 اردیبهشت 1394, 22:54 عصر
اصلا شما خط دو را به این صورت تغییر بدید که کارتون راحت تر بشه:
لازمه ابتدا اولین عددی که a به اون بخشپذیر هست را از بین اعداد بین 2 تا a-1 پیدا کنید

خخخ....کچلتون کردم از بس سوال پرسیدم...ببخشید:خجالت: