PDA

View Full Version : سوال: راهی برای بدست آوردن عد اول



raha1234567
یک شنبه 30 آبان 1389, 19:08 عصر
سلام دوستان
چند وقت پیش بک تاپیک گذاشتم ولی بخاطر وجود مشکل نتونستم بهش سر بزنم حالا که اومدم ببینم تاپیکم به کل ناپدید شده بود گفتم دوباره بذارم

برنامه زیر برا بدست آوردن عدد اولی است که ما عدد را بدیم و اون بگه اوله یا نه حالا یه برنامه میخوام که اعداد اول قبل از اون عدد را برام پیدا کنه
خودم فکر کردم بشه با دوتا for اجراش کرد اگه میشه کمکم کنید



cin>>n;
flag=0;
i=0;
whhile(n/2&&flag==0){
if(n%i==0)
flag=1}
if (flag==1)
cout <<adade aval ast;
else
cout<<adade aval nist;

Salar Ashgi
یک شنبه 30 آبان 1389, 20:10 عصر
ببینید دوست عزیز ، خوب وقتی شما تابعی جهت تشخیص اول بودن نوشتید ، با یه حلقه خیلی ساده ،
میشه حالا بزرگترین عدد اول کوچکتر از یک عدد رو هم پیدا کرد !
اگه باز مشکلی داشتید ، حتما مطرح کنید ./

raha1234567
یک شنبه 30 آبان 1389, 23:51 عصر
من از شما تشکر می کنم ولی باید بگم که نفهمیدم می شه یه توضیح مختصر بدید؟:لبخندساده:

raha1234567
دوشنبه 01 آذر 1389, 00:19 صبح
این راهی که نوشتم برای بدست آوردن اعداد اول قبل از عدد n ما درسته ؟ اگه راه بهتری هم هست لطف کنید کمک کنید بهم



cin>>n;
for(i=1;i<=n;i++)
if(i%i==0)
cout<<i;

صنعت نفت
دوشنبه 01 آذر 1389, 10:26 صبح
سلام
من فکر می کنم شما اگر از دو حلقه استفاده کنید راحت تر به جواب می رسید.
موفق باشید.

raha1234567
دوشنبه 01 آذر 1389, 15:53 عصر
این طوری درسته؟



for(i=3;<=n;i+=2)
{
for(j=2;j<=i;j++)
{
if(i%j==0 )
cout<<i;
}}

Salar Ashgi
دوشنبه 01 آذر 1389, 17:12 عصر
یه مثال ساده :


#include <iostream>
#include <conio>
#include <math>
bool is_Prime(int n){
if(n<=1)
return false;
else{
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
return false;
break;}
}
return true;
}
}
//==========================
int Find(int n){
for(int i=n-1;i>1;i--){
if(is_Prime(i)){
return i;
break;}
}
}
//==========================
int main(){
cout<<"Enter a number :\n";
int n;
cin>>n;
cout<<Find(n)<<endl;
getch();
}

توضیح : تابع is_Prime بررسی میکند که آیا عددی اول است یا خیر ؛ و تابع Find عددی را گرفته و بزرگترین
عدد اول کوچکتر از آن عدد را پیدا میکند .

موفق باشید ./

raha1234567
سه شنبه 02 آذر 1389, 17:00 عصر
منون از کمکتون ولی من می خوام اعداد اول قبل از عدد n را پیدا کنم می خوام ببینم از راهی که خودم نوشتم راه بهتری هست یا نه؟

Salar Ashgi
سه شنبه 02 آذر 1389, 22:29 عصر
من می خوام اعداد اول قبل از عدد n را پیدا کنم می خوام ببینم از راهی که خودم نوشتم راه بهتری هست یا نه؟
خوب ببینید این فقط یه مثال بود ، حالا شما خودتون میتونید از این الگوریتم ایده گرفته و در مسائل دیگر براحتی از آن استفاده کنید . در ضمن کد شما را نمی دانم کاملا درست جواب میدهد یا خیر ، ولی کمی مبهم است ، کدی که بنده نوشتم تقریبا راحتترین راه بود .

موفق باشید ./

raha1234567
سه شنبه 02 آذر 1389, 22:47 عصر
بازم من شرمنده شما هستم حالا که قرار شده از این برنامه کمک بگیرم می شه بهم بگید چرا i<=sqrt n) و یه توضیح کوچک هم در مورد قسمت find به بعد بدید

Salar Ashgi
سه شنبه 02 آذر 1389, 23:02 عصر
می شه بهم بگید چرا i<=sqrt n) و یه توضیح کوچک هم در مورد قسمت find به بعد بدید

پس از قرار معلوم شما در الگوریتم برنامه اشکال دارید ، البته باید این نکته را هم در نظر می گرفتید
که این موضوع اعداد اول بیش از 10 ها بار در بخش مطرح شده ، که با یک جستجوی خیلی ساده
میتوانستید به آنها دسترسی پیدا کنید و در شرایط فعلی تاپیک باید حذف میشد ، با این حال ، بگذریم و
جواب شما :
عدد اول عددی است که به جز 1 و خودش مقسوم علیه دیگری ندارد ، خوب ما از این ویژگی در
تشخیص اول بودن استفاده می کنیم ، به این شکل که : میتوان اثبات کرد که بزرگترین مقسوم علیه
یک عدد حداکثر میتواند تا جذر n باشد و نه بیشتر ! خوب ، با این اوصاف ما حلقه ای میگذاریم از 2
تا جذر n (ویا نصف n ، ولی جذر بهینه تر است) ، در این محدوده نه عدد یک موجود است و نه عدد n ،
پس یعنی عدد در صورتی اول خواهد بود که به هیچ کدام از اعداد موجود در این محدوده بخش پذیر نباشد ،
این از این ؛ بعد Find که دیگه کار خاصی صورت نمیگیره ، فقط ما تابع Find رو فرخوانی میکنیم ، همین !
اگه سوالی داشتید مطرح کنید .

موفق باشید ./

Salar Ashgi
سه شنبه 02 آذر 1389, 23:14 عصر
در ضمن به لینکهای زیر هم سری بزنید :

http://www.barnamenevis.org/forum/showpost.php?p=1159678&postcount=40

http://fa.wikipedia.org/wiki/%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF_%D8%A7%D9%88%D9%84

موفق باشید ./

raha1234567
سه شنبه 02 آذر 1389, 23:35 عصر
اول از همه از این که حذفم نکردید ممنون دار شما دوستان هستم
د.م اینکه من می فهمم برنامه را ولی همون طور که می دونید هر برنامه چندین راه داره و من می خوام بهترین راه و نوین ترین راه رو به کمک شما دوستان پیدا کنم و چون تازه کار هستم نمی تونم بفهمم که کدوم راه بهتره مطرح کردم
در ضمن بازم از کمکهاتون ممنون هستم

Salar Ashgi
چهارشنبه 03 آذر 1389, 17:50 عصر
من می خوام بهترین راه و نوین ترین راه رو به کمک شما دوستان پیدا کنم و چون تازه کار هستم نمی تونم بفهمم که کدوم راه بهتره مطرح کردم

خوب ببینید مسابقه برنامه نویسی ACM که قرار نیست بدهید ، شما که در ابتدای کار هستید همون بهتر
که از یه الگوریتم صحیح و درست شروع کرده و کد برنامه تان را بنویسید !
لینکهایی که در پست 12 معرفی شد ، پستهای مفیدی بودند .

موفق باشید ./

raha1234567
چهارشنبه 03 آذر 1389, 20:28 عصر
دوست عزیز باید به عرضتون برسونم که من گفتم تازه کار هستم نگفتم که دیگه هیچی از برنامه نویسی حالیم نیست تمامی این برنامه های داده شده در باب عدد اول بلد هستم و باید به عرضتون باز برسونم که در برنامه های نوشته شده به غیر از برنامه خود شما برنامه اولی که گذاشتم تکمیل شده آنها است یا حداقل اینکه در سطح همون برنامه خودم هست من که نمی خوام یه پروژه دانشجویی تحویل بدم که بخوام به یه جواب بسنده کنم می خوام در جواب هر سوال به قطعیت برسم و اگه برنامه را به کسی نشون دادم بدنه هیچ ایرادی قبول کنه و نگه که براش راه بهتری هم هست از این برنامه کوچک شروع کردم تا بتونم بزرگ تر هاش را جواب بدم ..
بازم از اینکه تاپیک را حذف نکدید ازتون ممنونم.:قلب::چشمک: