Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
SABB گفت
یه سوال از آقای گوهرشادی: من می خواستم اون برنامه جایگشت ها رو (سوال 1 شاززز) با تابع بازگشتی بنویسم. ولی نتونستم...

می شه یه کمکی بکنید؟ به نظر با تابع بازگشتی ساده می آد ولی نوشتنش سخته...
من هم اولش می خواستم همین کار رو بکنم ولی دیدم Order این کار خیلی افتضاح می شه. بهتره از 0 تا کوچکترین توان 10 که از اون عدد بزرگتره یکی یکی چک کنیم تا این که بازگشتی کار کنیم
 

SABB

New Member
ارسال ها
704
لایک ها
25
امتیاز
0
Goharshady گفت
SABB گفت
[center:96c99f05ff]
1
برنامه ای بنویسید که n و سپس دنباله ای از اعداد به طول n گرفته و بررسی کند که این دنباله گرافیک است یا خیر.
[/center:96c99f05ff]
شرط لازم و کافی برای گرافیک بودن یک دنباله چیست؟
دنباله
(
) گرافیکه اگر و فقط اگر دنباله
گرافیک باشه.
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
یعنی به نظر شما بازگشتی بنویسیم؟
 

SABB

New Member
ارسال ها
704
لایک ها
25
امتیاز
0
Goharshady گفت
یعنی به نظر شما بازگشتی بنویسیم؟
من بدون باز گشتی نوشته ام. البته وقتی سوالو نوشتم فکر کردم شاید بازگشتی بشه.... ولی تو بازگشتیش گیر کردم

[hr:4531ab3a80]پ.ن. من همین جا رسما اعلام می کنم تا آخر امتحانات (22 خرداد) اعتیاد خود را ترک خواهم کرد.
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
برنامه اي بنويسيد كه n را گرفته و
را محاسبه كند. (تابع اويلر)
 

SABB

New Member
ارسال ها
704
لایک ها
25
امتیاز
0
Olympiad گفت
برنامه اي بنويسيد كه n را گرفته و
را محاسبه كند. (تابع اويلر)
کد
#include<iostream.h>
#include<conio.h>
using namespace std;
using std::cout;
using std::cin;
unsigned long gcd(unsigned long n,unsigned long m)
{
    unsigned long r=1;
    while(r!=0)
    {
	   r=n%m;
	   if(r!=0)
	   {
		 n=m;
		 m=r;
	   }
    }
    return m;
}
int main()
{
    unsigned long n,i,fi=0;
    cout<<"Enter n:";
    cin>>n;
    for(i=1;i<n;i++)
	  if(gcd(n,i)==1)
		fi++;
    cout<<fi;
    getch();
}
 

farid_frd

New Member
ارسال ها
342
لایک ها
11
امتیاز
0
Goharshady1 گفت
Olympiad گفت
برنامه اي بنويسيد كه n را گرفته و
را محاسبه كند. (تابع اويلر)
لطفا فارسی بنویسید
فارسی تر از این ؟
اگه منظورت تابع اویلر هست منظور تعداد اعداد طبیعی کوچکتر از n است که نسبت به n اولند
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
چون شما هیچ زمانی تعیین نکرده اید:
کد
#include <iostream>
#include <conio.h>
using namespace std; using std::cin; using std::cout;
int main()
{
    loop:
    cout<<"\n";
    int n;
    cin>>n;
    int cs=1;
    for(int i=2;i<n;i++)
    {
		  bool co = true;
		  for(int j=2;j<=i;j++)
		  {
			if((i%j)==0)
			{
					  if((n%j)==0)
					  {
					    co=false;
					    break;
					  }
			}	 
		  }
		  if(co)  cs++;
    }
    cout<<cs;
    goto loop;
    getch();
    return 0;
}
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
farid_frd گفت
Goharshady1 گفت
Olympiad گفت
برنامه اي بنويسيد كه n را گرفته و
را محاسبه كند. (تابع اويلر)
لطفا فارسی بنویسید
فارسی تر از این ؟
اگه منظورت تابع اویلر هست منظور تعداد اعداد طبیعی کوچکتر از n است که نسبت به n اولند
یه فرمول داشت که من یادم نمی آید. می شه اونو بگین؟
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
این هم یک کد بهتر ولی هنوز از فرمول استفاده نمی کند:
کد
#include <iostream>
#include <math.h>
#include <stdlib.h>
using namespace std;
using std::cout; using std::cin;
bool inlist(int x,int *list,int num)
{
	for(int i=0;i<num;i++)
	{
				   if((*(list+i))==x)
					 return true;
	}
	return false;
}
bool prime(int x)
{
  for(int i=2;i<=sqrt(x);i++)
  {
		if((x%i)==0) return false;
  }
  return true;
}
int main()
{
    //loop:
    int n,coprimes=1;
    cin>>n;
    int *list = (int *)malloc(sizeof(int)*n);
    int enu =0;
    for(int i=2;i<n;i++)
    {
		  if((n%i)==0)
		  {
				    if(prime(i))
				    {
					   (*(list+enu))=i;
					   enu++;	   
				    }
		  }
    }
    for(int i=2;i<n;i++)
    {
		  bool x = true;
		  for(int j=2;j<=i;j++)
		  {
					    if(((i%j)==0)&&prime(j)&&inlist(j,list,enu))
					    {
							   x= false;
							   break;							
					    }
		  }
		  if(x) coprimes++;
    }
    cout<<coprimes;
    //goto loop;
    return 0;
}
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
SABB گفت
این هم به زبان ++g
جی پلاس پلاس یک زبان نیست ، یک کامپایلر برای سی پلاس پلاس است.
 

farid_frd

New Member
ارسال ها
342
لایک ها
11
امتیاز
0
Goharshady گفت
farid_frd گفت
Goharshady1 گفت
Olympiad گفت
برنامه اي بنويسيد كه n را گرفته و
را محاسبه كند. (تابع اويلر)
لطفا فارسی بنویسید
فارسی تر از این ؟
اگه منظورت تابع اویلر هست منظور تعداد اعداد طبیعی کوچکتر از n است که نسبت به n اولند
یه فرمول داشت که من یادم نمی آید. می شه اونو بگین؟
من فرمول مستقیمی که این تعداد رو بدست بیاره نمیدونم ولی احتمالا بشه با تجزیه و فرمول تعداد مقسوم علیه ها بدست آوردش
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
Goharshady گفت
farid_frd گفت
Goharshady1 گفت
Olympiad گفت
برنامه اي بنويسيد كه n را گرفته و
را محاسبه كند. (تابع اويلر)
لطفا فارسی بنویسید
فارسی تر از این ؟
اگه منظورت تابع اویلر هست منظور تعداد اعداد طبیعی کوچکتر از n است که نسبت به n اولند
یه فرمول داشت که من یادم نمی آید. می شه اونو بگین؟
اگر
كه
ها اول هستند (تجزيه ي
) ، آنگاه :
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
ممنون. ولی خیلی سخت شد!
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
پس فکر می کنم قبلش لازم باشه یک برنامه ی دیگه بنویسیم.
برنامه ای بنویسید که عددی را گرفته و آن را به عوامل اول تجزیه کند. مثلا 12=2^2*3
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
برنامه ی تجزیه به اعداد اول:
کد
#include <conio.h>
#include <iostream>
#include <stdlib.h>
#include <cmath>
using namespace std; using std::cin; using std::cout;
bool prime(int x)
{
	if(x==1) return false;
	for(int i=2;i<x;i++)
	{
		   if((x%i)==0)
			return false;
	}
	return true;
}
int main()
{
    int number;
    cin>>number;
    cout<<"\n"<<number<<" = 0";
    for(int i=2;i<=number;i++)
    {
		  if(((number%i)==0)&&prime(i))
		  {
				  cout<<" + "<<i;
				  int tavan=0;
				  while((number%i)==0)
				  {
								  number/=i;
								  tavan++;
				  }
				  cout<<"^"<<tavan;			    
		  }
    }
    getch();
    return 1389;
}
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
با توجه به برنامه ی قبلی ، این هم جواب سوال اویلر:
کد
#include <conio.h>
#include <iostream>
#include <cmath>
using namespace std; using std::cin; using std::cout;
bool prime(int x)
{
	if(x==1) return false;
	for(int i=2;i<x;i++)
	{
		   if((x%i)==0)
			return false;
	}
	return true;
}
int main()
{
    int number;
    cin>>number;
    float coprime = number;
    for(int i=2;i<=number;i++)
    {
		  if(((number%i)==0)&&prime(i))
		  {
				  int tavan=0;
				  while((number%i)==0)
				  {
								  number/=i;
								  tavan++;
				  }
				  //i be tavane tavan!!
				  float x = (float)1/i;
				  x= 1-x;
				  coprime *=x;			 
		  }
    }
    cout<<"\n"<<coprime;
    getch();
    return 1389;
}
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
لطفا سوال بعدی را بگذارید
 
بالا