#8210: why?RE


cuh127 (futurhack~~~~~興國猩國也(絕對沒有在污辱女性))

學校 : 臺南市私立興國高級中學
編號 : 28132
來源 : [203.68.26.150]
最後登入時間 :
2014-04-02 16:51:03
a702. Cousin Primes | From: [118.233.170.236] | 發表日期 : 2013-09-20 23:35

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
 long long int x[500000]={0},a,b,c,d,e,f,i,j;
 long long int y[100000]={0};
 x[1]=2;
 x[2]=3;
 x[3]=5;
 x[4]=7;
 int k=4;
 for(i=9;i<20000000;i=i+2)
 {a=1;
 for(j=1;j<=k;j++)
  {if(i%x[j]==0)
  {a=0;
  break;
   
  }
  if(x[j]*x[j]>i)
  break;
   
  }
  
  if(a==1)
  {k++;
  x[k]=i;
   
  }
 }
 b=0;
 for(i=0;i<=10001;i++)
 y[i]=0;
 
 for(i=1;i<=k;i++)
 {
  for(j=i+1;j<=k;)
 {if(x[j]-x[i]==4)
 {b++;
 y[b]=x[i];
 break;
  
 }
 else if(x[j]-x[i]>4)
 break;
 
 else;
 
  j=j+1;
 }
 if(b>10000)
 break; 
  
 }
 
 while(scanf("%lld",&a)!=EOF)
 {printf("(%lld, %lld)\n",y[a],y[a]+4);
  
  
 }
 
 return 0;
}

 
#8211: Re:why?RE


cuh127 (futurhack~~~~~興國猩國也(絕對沒有在污辱女性))

學校 : 臺南市私立興國高級中學
編號 : 28132
來源 : [203.68.26.150]
最後登入時間 :
2014-04-02 16:51:03
a702. Cousin Primes | From: [118.233.170.236] | 發表日期 : 2013-09-21 00:22

 


是陣列宣告太小

但還是TLE

請問大大

算質數要如何加速?

光是算到20000000就會TLE了

 
#8212: Re:why?RE


rosynirvana (rosynirvana)

學校 : 不指定學校
編號 : 33880
來源 : [182.114.3.244]
最後登入時間 :
2017-07-24 00:02:04
a702. Cousin Primes | From: [58.247.228.228] | 發表日期 : 2013-09-21 00:50

 

 

是陣列宣告太小

但還是TLE

請問大大

算質數要如何加速?

光是算到20000000就會TLE了

把array放到main外面去

放在函数里面可能会把stack爆掉所以RE 

 
#8227: Re:why?RE


cuh127 (futurhack~~~~~興國猩國也(絕對沒有在污辱女性))

學校 : 臺南市私立興國高級中學
編號 : 28132
來源 : [203.68.26.150]
最後登入時間 :
2014-04-02 16:51:03
a702. Cousin Primes | From: [118.233.170.236] | 發表日期 : 2013-09-24 23:46

 

 

是陣列宣告太小

但還是TLE

請問大大

算質數要如何加速?

光是算到20000000就會TLE了

把array放到main外面去

放在函数里面可能会把stack爆掉所以RE 

但還是TLE

如何加速

 
#8229: Re:why?RE


rosynirvana (rosynirvana)

學校 : 不指定學校
編號 : 33880
來源 : [182.114.3.244]
最後登入時間 :
2017-07-24 00:02:04
a702. Cousin Primes | From: [58.247.231.202] | 發表日期 : 2013-09-25 10:09

 

 

是陣列宣告太小

但還是TLE

請問大大

算質數要如何加速?

光是算到20000000就會TLE了

把array放到main外面去

放在函数里面可能会把stack爆掉所以RE 

但還是TLE

如何加速

我的做法是,先用eratosthenes筛法找20000001以下所有质数

然后扫一遍得到的质数表,检查每个临近对的差是不是2,是就缓存起来

之后就是O(1) 的查找了

 
#8250: Re:why?RE


cuh127 (futurhack~~~~~興國猩國也(絕對沒有在污辱女性))

學校 : 臺南市私立興國高級中學
編號 : 28132
來源 : [203.68.26.150]
最後登入時間 :
2014-04-02 16:51:03
a702. Cousin Primes | From: [118.233.170.236] | 發表日期 : 2013-09-29 23:36

 

 

是陣列宣告太小

但還是TLE

請問大大

算質數要如何加速?

光是算到20000000就會TLE了

把array放到main外面去

放在函数里面可能会把stack爆掉所以RE 

但還是TLE

如何加速

我的做法是,先用eratosthenes筛法找20000001以下所有质数

然后扫一遍得到的质数表,检查每个临近对的差是不是2,是就缓存起来

之后就是O(1) 的查找了

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
long long int x[20000031]={0},a,b,c,d,i,j,k;
long long int y[100021];
y[1]=3;
k=1;
for(i=3;i<=3;i++){
           c=20000000/3;
  if(c%2==0)
  c=c-1;
for(j=i;j<=c;j+=2)
{x[i*j]=1;
}
}
for(i=5;i<=20000000;i=i+2)
{if(x[i]==1)
continue;
if(x[i+4]==0)
{
k++;
y[k]=i;
if(k==100000)
goto ll;
}
c=20000000/i;
if(c%2==0)
c=c-1;
for(j=i;j<=c;j=j+2)
{x[i*j]=1;
}
}
ll:
while(scanf("%d",&a)!=EOF)
{printf("(%lld, %lld)\n",y[a],y[a]+4);
}
return 0;
}
會RE

 
#8251: Re:why?RE


cuh127 (futurhack~~~~~興國猩國也(絕對沒有在污辱女性))

學校 : 臺南市私立興國高級中學
編號 : 28132
來源 : [203.68.26.150]
最後登入時間 :
2014-04-02 16:51:03
a702. Cousin Primes | From: [118.233.170.236] | 發表日期 : 2013-09-29 23:39

 



#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
long long int x[24][1000001]={0},a,b,c,d,i,j,k;
long long int y[100021];
y[1]=3;
k=1;
for(i=3;i<=3;i++){
           c=20000000/3;
  if(c%2==0)
  c=c-1;
for(j=i;j<=c;j+=2)
{b=(i*j)/1000000;
c=(i*j)%1000000;
x[b][c]=1;
}
}
for(i=5;i<=20000000;i=i+2)
{b=i/1000000;
c=i%1000000;
if(x[b][c]==1)
continue;
b=(i+4)/1000000;
c=(i+4)%1000000;
if(x[b][c]==0)
{
k++;
y[k]=i;
if(k==100000)
goto ll;
}
c=20000000/i;
if(c%2==0)
c=c-1;
for(j=i;j<=c;j=j+2)
{b=(i*j)/1000000;
c=(i*j)%1000000;
x[b][c]=1;
}
}
ll:
while(scanf("%lld",&a)!=EOF)
{printf("(%lld, %lld)\n",y[a],y[a]+4);
}
return 0;
}
這樣也 RE 
 
#8252: Re:why?RE


cuh127 (futurhack~~~~~興國猩國也(絕對沒有在污辱女性))

學校 : 臺南市私立興國高級中學
編號 : 28132
來源 : [203.68.26.150]
最後登入時間 :
2014-04-02 16:51:03
a702. Cousin Primes | From: [118.233.170.236] | 發表日期 : 2013-09-29 23:52

 

要把array放到main外

是我沒把大大的解釋看清楚 

 
ZeroJudge Forum