Documente Academic
Documente Profesional
Documente Cultură
Solutie.
#include<iostream>
using namespace std;
long long a,b,a1,b1,p=1,d,d1,i;
long cmmdc(long a, long b)
{
long r=0;
while(b)
{
r=a%b;
a=b;
b=r;
}
return a;
}
int main()
{
cin>>a>>b;
d=cmmdc(a,b);
for(i=1;i<=d;i++)
if(d%i==0)
cout<<i<<" ";
return 0;
}
2.
Scrieţi un program care pentru un interval dat determină care este cel
mai mic număr din interval ce are număr maxim de divizori. Dacă sunt
mai multe numere cu această proprietate se cere să se numere câte
sunt.
Solutie:
#include <fstream>
ifstream in("maxd.in");
ofstream out("maxd.out");
const int N=45000;
bool c[N];
int prim[N],np;
void ciur(){
int i ,j;
for(i=2;i*i<N;i++)
if(!c[i])
for(j=i*i;j<N;j+=i)
c[j]=true;
for(i=2;i<N;i++)
if(!c[i]){
++np;
prim[np]=i;
}
}
int div(int n)
{
int i , p , nr=1;
for(i=1;prim[i]*prim[i]<=n;i++)
{
if(n%prim[i]==0)
{
p=0;
while(n%prim[i]==0)
{
n/=prim[i];
p++;
}
nr*=p+1;
}
}
if(n!=1)
nr*=2;
return nr;
}
int main()
{
int a ,b , i ,nr, max ,ret, d;
ciur();
in >> a >>b;
max = 0;
for(i=a;i<=b;i++)
{
d = div(i);
//out << d << "\n";
if(d>max)
{
ret=i;
max=d;
nr=1;
}
else if(d==max) nr++;
}
out<<ret<<" ";
out<<max<<" ";
out<<nr;
return 0;
}