PDA

View Full Version : کد فوق العاده عجیب



sa1378
جمعه 10 مرداد 1393, 11:05 صبح
(این کد توی Dev c++ امتحان شده و برای شما ممکنه ارور نده)
سلام
اینجا یه کد فوق عجیب دارم که قراره اعداد اول 1 تا 10 میلیون رو تشخیص بده:
#include <iostream>
#include <vector>

using namespace std;

#define N 10*1000*1000
bool p[N];
int f[N], a[N];
vector<int> primes;


int main()
{
for(int i=2 ; i<=N ; i++)
if(!p[i])//age addad aval bood
{
for(int j=i ; j<=N ; j+=i)//tamam mazrab hasho khat bezan
p[j]=true;// or =1
primes.push_back(i);
}


system("PAUSE");
return EXIT_SUCCESS;
}
این کد کاملا سالمه...
ولی وقتی در خط هشتم
int f[N], a[N];
رو برمیدارم (که ازشون توی هیچ جا استفاده نشده) موقع کامپایل یه چیزی مینویسه و هنگ میکنه
چرا واقعا؟

tux-world
جمعه 10 مرداد 1393, 11:50 صبح
Dev C++‎‎‎ قدیمی نشده؟ به نظرم کد صحیحت باید اینطوری باشه:

#define N (10*1000*1000)
bool p[N+1];

N ای که شما تعریف کردید معادل نمایش یک میلیون نیست بلکه 10*1000*1000 هستش. من حدس میزنم تو حافظه بعد اینکه شما دارید N رو تعریف میکنید اون متغیرها هم تعریف میشن که توسط وکتور استفاده میشن.

motherboard
جمعه 10 مرداد 1393, 18:09 عصر
کامپایل میشه.اما اصلا با توجه به هدف و انتظاری که از کد میره کار خاصی رو نمیکنه!!!! اما نکته دوم اینکه من تا حالا ندیدم که یک میلیون متغیر رو بشه توسط تعریف یک ارایه ایجاد کرد.چون کلا هنگ می کنه!!!! ولی خودمونیم این کد واقعا عجیبه!!!!

ProgramYL
جمعه 10 مرداد 1393, 21:55 عصر
Dev C++‎‎‎‎ قدیمی نشده؟ به نظرم کد صحیحت باید اینطوری باشه:
...
....


شما سوال در stackoverflow پرسیدی؟ :چشمک:

tux-world
جمعه 10 مرداد 1393, 22:16 عصر
اره. من پرسیدم چون برای خودمم جالب بود

dasssnj
شنبه 11 مرداد 1393, 05:55 صبح
میشه لینک اون صفحه ی stackoverflow را بزارید؟

alireza es
شنبه 11 مرداد 1393, 11:09 صبح
میشه لینک اون صفحه ی stackoverflow را بزارید؟
من میذارم
لینک Stack over flow (http://stackoverflow.com/questions/25075353/c-hangup-after-removing-unused-variables)

motherboard
شنبه 11 مرداد 1393, 18:24 عصر
اقا بریدید و دوختید!!!! جدا هدف از این کد چیه؟؟!! من که کامپایل می کنم هیچ چیز خاصی رو نمی بینم.ایا اصلا کد برای تشخیص اعداد اول 1 تا 10 میلیون درسته؟؟؟؟؟؟؟؟ این کدها از نظر گرامری ظاهرا درسته و کامپایل میشه!!!!!!! اما هدف از این کد چیه؟ ایا تشخیص اعداد اول است؟ پس چرا من هیچ نتیجه ای رو نمی بینم. زمانی که کد ناقصه دیگه ایراد گرفتن از خط فلان و بهمان چه صیغه ای هستش؟ لطفا یکی من رو روشن کنه!!!!!!!

dasssnj
یک شنبه 12 مرداد 1393, 04:24 صبح
اون اعداد که توی وکتور ریخته میشن . مشکل این بود که چرا وقتی دو تا متغیر بی استفاده را پاک کردیم برنامه کرش کرد . که این مشکل حل شد.
حالا شما اگه می خوای اعداد را نشون بدی یا توی فایل بریزی از وکتور بخون و هر کار می خوای باهاشون بکن.

sa1378
یک شنبه 12 مرداد 1393, 14:30 عصر
عزیزانی که میگن هدف کد چیه:
این کد برای درست کردن الگوریتمه و کامل نیست
این کد کامله که تعداد مقسوم علیه همه اعداد رو چاپ میکنه
البته یه 10 سالی طول میکشه به 10 میلیون برسه:
#include <iostream>
#include <vector>

using namespace std;

#define N 10*1000*1000
bool p[N];
int f[N];
vector<int> primes;



int main()
{

for(int q=0 ; q<N ; q++)
f[q]=1;


for(int i=2 ; i<=N ; i++)
if(!p[i])//age addad aval bood
{
for(int j=i ; j<=N ; j+=i)//tamam mazrab hasho khat bezan
p[j]=true;// or =1
primes.push_back(i); //be araye primes adad aval ro ezafe kon
}
for(int i=1 ; i<=N ; i++)//barresi tamam adad
{
int k=i;//baraye ijad taghir rooye i
//int ans=1;//hesab kardan tedad maghsoom alaih haa
for(int j=0 ; j<primes.size() ; j++)//barasi baraye tamam adad aval
{
int c=0;//shomarande tavan addad avval
int y=primes[j];//baraye rahati kar
if( (y*y) > k )
break;
while( k%y==0 )//age bakhsh pazir bood
{
k/=y;
C++‎‎‎;
}
f[i-1]*=(c+1);//tebgh formool maghsoom alaih
}
if(k>1)//baraie bishtar adad dar akhar in algoritm k barabar ba adadi aval mishavad
f[i-1]*=(1+1);
cout<<i<<"\t"<<f[i-1]<<endl;
}
sort(f+0,f+N-1);
cout<<f[0]<<endl;


system("PAUSE");
return EXIT_SUCCESS;
}

sa1378
یک شنبه 12 مرداد 1393, 14:31 عصر
Dev C++‎‎‎‎‎‎‎ قدیمی نشده؟ به نظرم کد صحیحت باید اینطوری باشه:

#define N (10*1000*1000)
bool p[N+1];

N ای که شما تعریف کردید معادل نمایش یک میلیون نیست بلکه 10*1000*1000 هستش. من حدس میزنم تو حافظه بعد اینکه شما دارید N رو تعریف میکنید اون متغیرها هم تعریف میشن که توسط وکتور استفاده میشن.

دستتون درد نکنه بابت جواب

و اینکه من برای المپیاد کامپیوتر کار میکنم و چون اونجا کامپایلر dev بهمون میدن مجبورم با این کار کنم تا عادت کنم
الان هم عادت کردم
از visual studio خیلی راحت تره
ولی مشکلش اینه که debug نداره اصلا