Page **7** of **12**

Posted: **Wed Jun 06, 2007 8:50 am**

by **little joey**

Code: Select all

```
long bil_prima[10000]={prime number between 1-50000}
```

Does that compile on your computer?

As a side: I wouldn't mix integer and floating point types, because you might introduce rounding errors.

Instead of

You can use

without loss of precision.

Posted: **Wed Jun 06, 2007 6:50 pm**

by **Deny Sutani**

At the first time, I make a function to generate all prime between 1-50000. I think if i remake my code like that, it will increase the process.

In my real code it's written like this

long bil_prima[10000]={

2, 3, 5, 7, 11, 13, 17, 19,..., 49853, 49871, 49877, 49891, 49919, 49921, 49927, 49937, 49939, 49943, 49957, 49991, 49993, 49999};

... = prime number too.

I think it will br too long write it all here.

And thanx for your advice. I can't believe that the first rank reply my post. So glad.

And I'm sorry if my posting has to many error. I'm not sufficient enough in English.

Posted: **Fri Jun 08, 2007 10:26 am**

by **Deny Sutani**

I try to change my code. It produces RE(Signal

Code: Select all

```
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define max 50000
long bil_prima[5133];
bool prime[max+1];
void prima()
{
int i,j,x=0;
int limit = (int) sqrt(max)+1;
for (i=1;i<=max;i++) prime[i] = i&1;
prime[0] = prime[1] = false;
prime[2] = true;
for (i=3 ; i <= limit ; i+=2)
{
if (prime[i])
for ( j = i*i ; j<=max;j+=i)
prime[j] = false;
}
for(i=0;i<max;i++)
{
if(prime[i]==true)
{
bil_prima[x] = i;
x++;
}
}
}
int main()
{
freopen("input.in","r",stdin);
freopen("output.out","w",stdout);
long angka,temp, x;
prima();
while(scanf("%ld",&angka) && angka !=0)
{
printf("%ld = ",angka);
x = 0;
if(angka < -1)
{
printf("-1 x ");
angka = angka * -1;
}
while(angka>1)
{
if(bil_prima[x]*bil_prima[x] > angka)
{
printf("%ld\n",angka);
break;
}
if(angka%bil_prima[x]==0)
{
printf("%ld ", bil_prima[x]);
angka/=bil_prima[x];
if (angka > 1) printf("x ");
}
else bil_prima[x++];
}
}
return 0;
}
```

Somebody help me?

### 583 RTE,help needed

Posted: **Wed Jul 18, 2007 10:55 pm**

by **Fuad Hassan EWU**

i am getting RTE. plz explain why. for what limit i will have to generate prime?

here is my code

Posted: **Sun Jul 22, 2007 12:43 pm**

by **newton**

Posted: **Sun Jul 22, 2007 2:12 pm**

by **Jan**

Try the cases.

**Input:**
Code: Select all

```
1111111111
100001
1000001
100000003
-100000007
2147483647
-2147483647
0
```

**Output:**
Code: Select all

```
1111111111 = 11 x 41 x 271 x 9091
100001 = 11 x 9091
1000001 = 101 x 9901
100000003 = 643 x 155521
-100000007 = -1 x 100000007
2147483647 = 2147483647
-2147483647 = -1 x 2147483647
```

Hope these help.

Posted: **Mon Jul 23, 2007 2:44 pm**

by **newton**

abdullah how it can be?? may u explaine in brief???

thanx in advanced

Posted: **Tue Jul 24, 2007 7:57 am**

by **abdullah<cse du>**

Newton,

As I remember their is no need to generat prime number. You can find the prime factors of a number(positive/negetive) without generating prime.

Try youself.

I think this will help you.

ABDULLAH.

### Re: 583 RTE,help needed

Posted: **Sat Aug 04, 2007 7:44 pm**

by **A1**

Fuad Hassan EWU wrote: i am getting RTE. plz explain why. for what limit i will have to generate prime?

here is my code

Code: Select all

```
#include<stdio.h>
#include<iostream>
#include<math.h>
....
```

First, Why you declare a long long(8 byte) type array for seiving..!! It is just a flag array.. so

**char** or

**bool** (1 byte) data type is good enough for that flaging of prime.

Second, Maximum number you need to prime factorize is : 2^31 -1 or 2147483647. So maximum prime you need to prime factorize that number is less then or equal to

**sqrt(214748367) ** so max = 50000 would be enough.

Third, As i already said, for prime factorizing a number maximum prime u need is less then or equal sqrt of that number.

So, Look at your code:

while(n>1){

while(n%prmcol

*==0){ // Here ***i** is always increasing

........

}

i++;

}

Now if a number it self is a prime for example: 2147483647. your loop will try to access a memory index of 2147483647 of **prmcol** array!! Which is causing the RTE.

So use a break condition for stoping this blind loop.

NB:I have updated your code and PM you.. check the code there! But try to fix it by your self first.

Posted: **Sun Aug 05, 2007 12:47 am**

by **Fuad Hassan EWU**

Thanks A1, It worked for me. and it really made my concepts clear.

thanks a lot.

### getting RTE

Posted: **Sat Aug 18, 2007 7:09 pm**

by **chinmoy kanti dhar**

Why runtime error? help me plz

Code: Select all

```
#include<stdio.h>
#include<math.h>
#define ma 100000
long n;
void main()
{
long a[ma]={0},c,i,j,k,m,p[10000];
//prime
for(i=2;i<=sqrt(ma);i++)
if(a[i]==0)
for(j=i+i;j<=ma;j=j+i)a[j]=1;
j=1;
for(i=2;i<=ma;i++)
if(a[i]==0)p[j++]=i;
while(scanf("%ld",&n)==1)
{
if(n==0)break;
printf("%ld = ",n);m=0;
if(n<0){n=(-1)*n;printf("-1");m=1;}
c=n;
for(i=1;p[i]<=sqrt(c);i++)
{
while(1)
{
if(n%p[i]==0){n=n/p[i];if(m==1)printf(" x ");
printf("%ld",p[i]);m=1;}
else break;
}
if(n==1)break;
}if(n!=1){if(m==0)printf(" %ld",n);else printf(" x %ld",n);}
printf("\n");
}
}
```

Posted: **Wed Dec 19, 2007 11:06 pm**

by **turcse143**

you should not put the prime number to the array. Solving the RTE u may get TLE.

ur program crash in that section:

for(i=1;p*<=sqrt(c);i++)*

{

while(1)

{

if(n%p*==0){n=n/p**;if(m==1)printf(" x ");*

printf("%ld",p*);m=1;}*

else break;

}

while(1), causes OLE.

Instead of it:

Starting from 2,3,5,7... divide the given number, and print it.

hope it will work.

### 583 - Prime Factors TLE

Posted: **Thu Jun 26, 2008 9:17 am**

by **aeiou**

Hello ,

ACed... Thanks to Jan..

### Re: 583 - Prime Factors

Posted: **Fri Jun 27, 2008 8:03 am**

by **Jan**

Well, if it gets TLE then you can store the primes first. And for each query try to divide it with the primes (not all the numbers).

### Re: 583 - Prime Factors

Posted: **Fri Jun 27, 2008 8:52 am**

by **aeiou**

Thanks for the idea Jan...My code appears to be faster to me , I thought tat ll pass TL , but now precalculated the primes and got AC ...

Thank u very much...