Re: 10200 - Prime Time
Posted: Tue Feb 10, 2009 9:25 am
THANKS Jan
it works with eps
it works with eps

Code: Select all
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
bool prime[10000]={0};
bool isprime(long long x)
{
int end=sqrt(double(x))+1;
for(int q=3;q<=end;q+=2)
if(x%q==0)
return false;
return true;
}
void getprimes()
{
int limit = 10000, i, j;
for(i=40; i<=limit; i++)
{
long long temp=(i)*(i);
temp+=(i);
temp+=41;
if(isprime(temp))
prime[i]=1;
}
}
int main()
{
getprimes();
int a=0,b=0;
while(cin>>a>>b)
{
if(b<40)
cout << "100.00\n";
else
{
float tot = b-a+1;
float count=0;
for(int z=a;z<=b;z++)
{
if(z<40)
{
int o=40-z;
count+=o;
z=40;
}
if(prime[z]==1)
count++;
}
float per = count/tot;
per=per*100;
cout << fixed;
cout << setprecision (2) << per << endl;
}
}
return 0;
}
Code: Select all
Code: Select all
double per
Code: Select all
float per
Code: Select all
int end=sqrt(double(x))+1;
Code: Select all
int end=sqrt(double(x));
Code: Select all
#define eps 1e-9
cout << setprecision (2) << per + eps << endl;
Code: Select all
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static boolean isPrime(int num){
double testPrime = Math.sqrt(num);
if (num==0 || num==1 || num==2)
return false;
for (int i=3;i <= testPrime;i+=2){
if (num%i==0)
return false;
}
return true;
}
public static void main(String[] args) throws Exception
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line = "";
StringTokenizer data;
int start, end, counter, interval;
double percentage;
while ((line = reader.readLine()) != null)
{
counter = 0;
data = new StringTokenizer(line);
start = Integer.parseInt(data.nextToken());
end = Integer.parseInt(data.nextToken());
interval = end - start + 1;
for(int i=start; i<=end; i++)
{
if(isPrime(i*i+i+41))
counter++;
}
percentage = ((double)counter)/interval*100;
percentage = Math.round(percentage*100)/(double)100;
System.out.println(percentage);
}
}
}
Code: Select all
#include<stdio.h>
#include<math.h>
#define MAX 1000000
bool pr[MAX];
int pri[80000];
void sieve(){
int ns=0;
int sq;
sq=sqrt(MAX);
pr[0]=true;
pr[1]=true;
pri[ns++]=2;
for(int i=4;i<=MAX;i+=2)
pr[i]=true;
for(int j=3;j<=MAX;j++){
if(pr[j]==false)
pri[ns++]=j;
if(j<=sq){
for(int k=j*j;k<=MAX;k+=(2*j))
pr[k]=true;
}
}
//printf("%d",ns);
}
int main(){
// freopen("10220.txt","r",stdin);
int n,m,prime,count,ns,sq,fg;
double ans;
sieve();
while((scanf("%d %d",&n,&m)==2)){
count=0;
for(int i=n;i<=m;i++){
prime=(i*i)+i+41;
// printf("%d ",prime);
if(prime<=1000000){
if(pr[prime]==false)
count++;
}
else {
sq=sqrt(prime);
fg=0;
for(int j=0;pri[j]<=sq;j++){
if(prime%pri[j]==0){
fg=1;
break;
}
}
if(fg==0)
count++;
}
}
ns=m-n+1;
ans=count/(double)(ns);
ans*=100;
printf("%.2lf\n",ans);
}
return 0;
}
Code: Select all
#include<stdio.h>
#include<math.h>
#define len 10000000
char prime[len+1];
void sieve()
{
int i,j,k=0,r;
prime[0]=prime[1]=0;
prime[2]=1;
for(i=3;i<=len;i+=2)
{
prime[i]=1;
prime[i+1]=0;
}
r=(int)sqrt(len);
for(i=3;i<=r;i++)
{
if(prime[i]==1)
{
for(j=i*i;j<=len;j+=i*2)
{
prime[j]=0;
}
}
}
}
int main()
{
sieve();
int n1,n2,t,i,j,n;
float per,d,p;
while(scanf("%d%d",&n1,&n2)==2)
{
p=0;
if(n1>n2)
{
t=n1;
n1=n2;
n2=t;
}
d=n2-n1+1;
for(i=n1;i<=n2;i++)
{
n=i*i+i+41;
if(prime[n]==1) p++;
}
per=(p/d)*100;
printf("%.2f\n",per);
}
return 0;
}
Code: Select all
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
bool prime[10005];
int p=0;
prime[0]=false;
prime[1]=false;
for(p=2;p<=10000;p++)
prime[p]=true;
int i;
for(p=2;p<10001;p++)
{
for(i=p*2;i<=10000;i=i+p)
{
if(prime[i])
{
prime[i]=false;
}
}
}
bool rp[10005];
for(i=0;i<=10000;i++)
rp[i]=true;
for(i=2;i<=10000;i++)
{
int g=0,res;
res=i*i+i+41;
for(g=2;g<=sqrt(res);g++)
{
if(res%g==0&&prime[g])
{
rp[i]=false;
break;
}
}
}
int a,b;
while((scanf("%d%d",&a,&b))==2)
{
int c=0,pc=0;
for(c=a;c<=b;c++)
{
pc=pc+rp[c];
}
float avg=(float)((pc*100))/(float)((b-a+1));
printf("%.2f\n",avg);
}
return 0;
}
What wrong here???????
anybody help me please???????