Pagini recente » Borderou de evaluare (job #2772086) | Cod sursa (job #791220) | Cod sursa (job #2749753) | Cod sursa (job #2830423) | Cod sursa (job #2405029)
#include <fstream>
#define int unsigned long long
#define fisier1 ifstream in("magic2.in");
#define fisier2 ofstream out("magic2.out");
//#define in cin
//#define out cout
using namespace std;
int f[105],maxx;
int v[105];
fisier1
fisier2
void ciur()
{ int i,d;
for(i=2;i<=100;++i)
{
v[i]=1;
}
for(i=2;i<=100;++i)
{
if(v[i])
{
for(d=2*i;d<=100;d+=i)
v[d]=0;
}
}
}
void desc(int n)
{
while(n%2==0 && n>1)
{
n/=2;
f[2]++;
}
for(int i=3;i<=100 && n>1;i+=2)
{
if(v[i]){
while(n%i==0)
f[i]++,n/=i;
maxx=max(maxx,i);
}
}
}
unsigned long long lgput(unsigned long long a,unsigned long long p){
long long i;
long long sol=1;
for (i = 1; i <= p; ++ i)
{
sol= (sol * a);
}
return sol;
}
int cbin(int n)
{
int st=1,dr=99,mid;
while (st<=dr)
{
mid=(st+dr)/2;
if(lgput(mid,2)<n)
st=mid+1;
else
if(lgput(mid,2)>n)
dr=mid-1;
else
return lgput(mid,2);
}
return lgput(mid,2);
}
main()
{
int k,i,m1,m2,o,j,c=0;
bool x;
unsigned long long cn,n,put,a,b,rez=0;
in>>k;
n=0;
put=1<<(k-1);
for(i=1;i<=k;++i)
{
in>>x;
n+=put*x;
put=put>>1;
}
cn=n; m1=m2=0;
put=1;
j=0;
while(n>9)
{ put*=10;
a=n%10;
++c;
b=n/10; b%=10;
o=10*a+b;
if(o>m1)
{ m2=m1;
m1=o;
j=c;
}
else
if(o==m1)
m2=o;
else
if(o>m2)
m2=o;
/*if(b!=a){
o=10*b+a;
if(o>m1)
{ m2=m1;
m1=o;
}
else
if(o==m1)
m2=o;
else
if(o>m2)
m2=o;
}*/
n/=10;} n=cn;
while(n && put>1)
{
a=n/put;
b=n%put; b=b/(put/10);
o=10*a+b;
if(!(o==m1 && (m1/10==m1%10))){
if(o>m1)
{ m2=m1;
m1=o;
}
else
if(o==m1)
m2=o;
else
if(o>m2)
m2=o;}
n%=put;
put/=10;
}
n=cn;
n=m1*m2;
desc(n);
rez=1;
for(i=2;i<=99;++i)
{
if(n%(i*i)==0)
rez=i*i;
if(i*i>=n)
break;
}
out<<rez;
return 0;
}