- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
#include <iostream>
#include <math.h>
using namespace std;
long long h[104680];
int main(){
int wr,a2,a3,a5,a7,a11,a13,a17,a19,a23,a29,a31,a37,i,t;
long long p,u,f1,c1,e,k,n,g,c,f,b2,b3,b5,b7,b11,b13,b17,b19,b23,b29,b31,b37,j;
for (i=1;i<=104000;i++)h[i]=1000000000000000011;
for (a2=0;a2<=8;a2++){
b2=powf(2,a2);
for (a3=0;a3<=4;a3++){
if (a2<a3)break;
b3=b2*powf(3,a3);
for (a5=0;a5<=3;a5++){
if (a2<a5)break;
b5=b3*powf(5,a5);
for (a7=0;a7<=2;a7++){
if (a2<a7)break;
b7=b5*powf(7,a7);
for (a11=0;a11<=1;a11++){
if (a2<a11)break;
b11=b7*powf(11,a11);
for (a13=0;a13<=1;a13++){
if (a2<a13)break;
b13=b11*powf(13,a13);
for (a17=0;a17<=1;a17++){
if (a2<a17)break;
b17=b13*powf(17,a17);
for (a19=0;a19<=1;a19++){
if (a2<a19)break;
b19=b17*powf(19,a19);
for (a23=0;a23<=1;a23++){
if (a2<a23)break;
b23=b19*powf(23,a23);
for (a29=0;a29<=1;a29++){
if (a2<a29)break;
b29=b23*powf(29,a29);
for (a31=0;a31<=1;a31++){
if (a2<a31)break;
b31=b29*powf(31,a31);
for (a37=0;a37<=1;a37++){
k=b31*powf(37,a37);
g=(a2+1)*(a3+1)*(a5+1)*(a7+1)*(a11+1)*(a13+1);
g=g*(a17+1)*(a19+1)*(a23+1)*(a29+1)*(a31+1)*(a37+1);
if (g<=103680){
if ((0<k)&&(k<h[g])){
h[g]=k;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
cin >> t;
for (i=1;i<=t;i++){
cin >> n;
f1=0;c1=0;
for (j=1;j<=103680;j++){
if (h[j]<=n){
f1=h[j];
c1=j;
}
}
cout << f1 << " " << c1 << endl;
}
cin >> i;
return 0;
}
отсюда: http://acm.timus.ru/forum/thread.aspx?id=26703&upd=634473973997426 601
типа решение одной олимпиадной задачки на теорию чисел
типа неверное (что неудивительно)
по ссылке можно увидеть другое не менее монструозное решение, которое проходит чуть больше тестов...