BorisSedov
Активный участник
Мой вариант.Покажите как напишите Вы. Может получится лучше?
C++:
#property strict
#property script_show_inputs
input int k = 1;
bool m[];
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
if(k<1 || k>51000000) {Print("k - ?"); return;}
int i,n,s,c;
if(k<=4) {n=10; s=n/10; c=0;}
else if(k<=25) {n=100; s=n/10; c=4;}
else if(k<=168) {n=1000; s=n/10; c=25;}
else if(k<=1229) {n=10000; s=n/10; c=168;}
else if(k<=9592) {n=100000; s=n/10; c=1229;}
else if(k<=78498) {n=1000000; s=n/10; c=9592;}
else if(k<=664579) {n=10000000; s=n/10; c=78498;}
else if(k<=5761455) {n=100000000; s=n/10; c=664579;}
else if(k<=50847534) {n=1000000000; s=n/10; c=5761455;}
else {n=1003162753; s=1000000000; c=50847534;}
fE(n);
for(i=s+1; i<=n; i++)
{
if(m[i])
{
c++;
if(c==k) break;
}
}
Print("Результат: ",i);
}
//+------------------------------------------------------------------+
void fE(int n)
{
int i,s,p;
ArrayResize(m,n+1);
ArrayInitialize(m,false);
m[2]=true;
m[3]=true;
for(i=5; i<=n; i+=6) m[i]=true;
for(i=7; i<=n; i+=6) m[i]=true;
for(i=9; i<=n; i+=6) m[i]=false;
for(s=5; s*s<=n;)
{
if(m[s])
{
p=s*2;
for(i=s*s; i<=n; i+=p) m[i]=false;
}
s+=2;
if(m[s])
{
p=s*2;
for(i=s*s; i<=n; i+=p) m[i]=false;
}
s+=4;
}
}
C++:
2019.06.27 17:55:00.444 test9 EURUSD,H1: Результат: 1299709
2019.06.27 17:55:00.335 test9 EURUSD,H1: initialized
2019.06.27 17:55:00.304 test9 EURUSD,H1 inputs: k=100000;
C++:
2019.06.27 17:51:22.631 test9 EURUSD,H1: Результат: 998555221
2019.06.27 17:51:00.756 test9 EURUSD,H1: initialized
2019.06.27 17:51:00.722 test9 EURUSD,H1 inputs: k=50777999;