10394...memory limit Exceed
Posted: Mon Aug 28, 2006 7:50 pm
Code: Select all
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int l=1,u=20000000,d,j;
d=u-l+1;
bool *flag=new bool[d];
for (int i=0;i<d;i++)
flag[i]=true;
for (int i=(l%2!=0);i<d;i+=2)
flag[i]=false;
for (int i=3;i<=sqrt(u);i+=2)
{
j=l;
while (j%i!=0)
j++;
for (j=j+i;j<u;j+=i)
flag[j-l]=false;
}
if (l<=1) flag[1-l]=false;
if (l<=2) flag[2-l]=true;
int c=1;
int b[110002];
for (int i=0;i<d;i++) if (flag[i] && flag[i+2])
{
b[c-1]=i+l;
c++;
}
int n;
while (cin>>n)
{
int t=b[n-1];
cout<<"("<<t<<", "<<t+2<<")"<<endl;
}
return 0;
}
Code: Select all
#include <stdio.h>
#include<math.h>
long int ar[100005],t,t1 ;
char arr[200000005];
void get_prime(long int n)
{
long int x ;
//char arr[20000005];
long int k=1,l;
for (x =1 ; x <= n ; x++)
{
arr[x]='0';
}
while( k <= sqrt(n))
{
if(arr[k] == '1' ||k==1)
k++;
else
{
for(int i=2 ; l<=n ;i++ )
{
l=i*k;
arr[l] = '1';
}
l =0;
k++;
}
}
t=0;
t1=0;
for(k=3 ;k <=n; k++)
{
if(arr[k]!='1' &&((arr[k+2] != '1') || (arr[k-2] != '1')))
{
ar[t1] = k;
t1++;
}
}
}
int main()
{
get_prime(20000000);
long int n;
while(scanf("%ld",&n)==1)
{
printf("(%ld, %ld)\n",ar[n-1],ar[n]);
}
return 0;
}
Code: Select all
gprime[j] = 1; // for(j = i * i; j <= 20000000;j+=i) so j can be 20000000, but you declared gprime[1000000]
Code: Select all
I get Accepted
Code: Select all
#include<iostream>
#include<cmath>
using namespace std;
bool prime[18409202];
void seive()
{
int m=4290;
memset(prime,true,sizeof(prime));
prime[0]=false;
prime[1]=false;
for(int i=2;i<=m;i++)
if(prime[i]) for(int k=i*i;k<=18409202;k+=i)
prime[k]=false;
}
int main()
{
seive();
long i,count,s;
while(cin>>s)
{
if(s==1)
cout<<"(3, 5)"<<endl;
else if(s>1)
{
count=1;i=5;
while(count!=s)
{
if(prime[i] && prime[i+2])
count++;
i=i+6;
}
cout<<"("<<i-6<<", "<<i-4<<")"<<endl;
}
}
system("pause");
}
Code: Select all
At Last AC in 1.4 sec
Code: Select all
#include<stdio.h>
#include<math.h>
long long a[100000],c,flag[1000000],b[10000][100];
void seive(long long n)
{
long long k,i,j,r;
k=sqrt(n);
for(i=1;i<=n;i++)
flag[i]=0;
flag[1]=1;
a[0]=2;
c=1;
for(i=4;i<=n;i+=2)
flag[i]=1;
for(i=3;i<=n;i+=2)
{
if(flag[i]==0)
{
a[c++]=i;
if(k>=i)
{
r=i+i;
for(j=i*i;j<=n;j+=r)
flag[j]=1;
}
}
}
a[c]=0;
}
int main()
{
long long n,f,i,p,j;
seive(2000000);
while(scanf("%lld",&n)==1&&n>0)
{
f=0;
j=0;
for(i=1;i<c;i++)
{
if(a[i]-2==a[i-1])
{
b[j][0]=a[i-1];
b[j][1]=a[i];
j++;
}
if(j==n)
break;
}
printf("(%lld, %lld)\n",b[j-1][0],b[j-1][1]);
}
return 0;
}