# Thread: Get first 40 digits of a BigInteger

1. Member Join Date
Dec 2011
Posts
12
Rep Power
0

## Get first 40 digits of a BigInteger

Hi, I need to write a program for which I need to get the first 40 digits of many BigInteger numbers, say about 100000 So, I can generate all these numbers in less than 2 seconds, but how do I get
the first 40 digits of all the numbers? I tried using toString(), it works but it is very very slow. I need something faster please help!  Reply With Quote

2. ## Re: Get first 40 digits of a BigInteger

Which are the first 40? From the left or from the right end of the number?
Can you post a SSCCE that compiles and demonstrates your problem?  Reply With Quote

3. Member Join Date
Dec 2011
Posts
12
Rep Power
0

## Re: Get first 40 digits of a BigInteger

The first 40 digits. Actually I need to get the first 40 digits of the first 100000 Fibonacci numbers. Sorry, but how to write a
SSCCE? I am actually new here, sorry for my lack of knowledge :(  Reply With Quote

4. ## Re: Get first 40 digits of a BigInteger

Google gives this: Short, Self Contained, Correct Example

To work on the problem we need code.

How many Fibonacci numbers do you need before you get one that has 40 digits?  Reply With Quote

5. Member Join Date
Dec 2011
Posts
12
Rep Power
0

## Re: Get first 40 digits of a BigInteger

Java Code:
```import java.io.*;
import java.util.*;
import java.math.BigInteger;

public class Main {
public static void main(String[] args){
BigInteger temp = BigInteger.valueOf(1);
BigInteger temp2 = BigInteger.valueOf(2);
BigInteger []ar;
ar = new BigInteger;
ar = temp;
ar = temp2;

for (int i = 2; i <= 100005; i++){
BigInteger temp3 = temp2;
temp2 = res;
temp = temp3;
String str = res.toString(); // This is the line which slows done the whole code in my opinion.
}
}
}```
Here's a part of my code, any help would be appreciated. Thanks a lot :)
Last edited by Norm; 12-13-2011 at 10:22 PM. Reason: added code tags  Reply With Quote

6. ## Re: Get first 40 digits of a BigInteger

What is the purpose of creating the String: str if you never use it?

If you remove the last statement in the loop, it will run faster.  Reply With Quote

7. Member Join Date
Dec 2011
Posts
12
Rep Power
0

## Re: Get first 40 digits of a BigInteger

My plan was to get the first 40 digits of the numbers using str.substring(0, 40); But just the conversion to a string takes a whole lot of time so I omitted the latter part. How can I achieve this more efficiently?  Reply With Quote

8. Banned Join Date
Dec 2011
Posts
143
Rep Power
0

## Re: Get first 40 digits of a BigInteger

Why have you got a huge array with only two values populated?  Reply With Quote

9. ## Re: Get first 40 digits of a BigInteger

You need to post the code you are having the problem with.

The code you posted does not use the String str so it makes no sense to have it in the code.  Reply With Quote

10. ## Re: Get first 40 digits of a BigInteger

The array isn't used in the loop either. It looks completely redundant.  Reply With Quote

11. Member Join Date
Dec 2011
Posts
12
Rep Power
0

## Re: Get first 40 digits of a BigInteger

Ok here goes my whole code.

Java Code:
```import java.io.*;
import java.util.*;
import java.math.BigInteger;

public class Main {
public static void main(String[] args){
BigInteger temp = BigInteger.valueOf(1);
BigInteger temp2 = BigInteger.valueOf(2);
BigInteger []ar;
ar = new BigInteger;
ar = temp;
ar = temp2;

for (int i = 2; i <= 100005; i++){
BigInteger temp3 = temp2;
temp2 = res;
temp = temp3;
String str = res.toString(); // This is the line which slows done the whole code in my opinion.
int len = str.length();
int flag;
if (len < 40) flag = len;
else flag = 40;
String substring = str.substring(0, flag);
BigInteger ans = new BigInteger(substring);
ar[i] = ans;
//System.out.println(ans);
}
}
}```
Last edited by sgtlaugh; 12-13-2011 at 10:36 PM. Reason: Forgot code tag  Reply With Quote

12. ## Re: Get first 40 digits of a BigInteger

Can you detect if the value of a BigInteger has > 40 decimal digits and use division to remove the low order digits you don't want.  Reply With Quote

13. Member Join Date
Dec 2011
Posts
12
Rep Power
0

## Re: Get first 40 digits of a BigInteger

Yes I tried division, it is slow like toString() because I have to perform it about 100,000 times   Reply With Quote

14. Member Join Date
Dec 2011
Posts
12
Rep Power
0

## Re: Get first 40 digits of a BigInteger

I also tried using BigInteger.shiftRight(int bits) to trim result, but I don't know how to achieve this. It would have been much faster but I don't know if it's possible  Reply With Quote

15. ## Re: Get first 40 digits of a BigInteger

You can't shift binary bits an even number of decimal digits.  Reply With Quote

16. ## Re: Get first 40 digits of a BigInteger

Can you post the code you used with the division?  Reply With Quote

17. Member Join Date
Dec 2011
Posts
12
Rep Power
0

## Re: Get first 40 digits of a BigInteger

Okay but how to solve my problem now? Any suggestions?  Reply With Quote

18. ## Re: Get first 40 digits of a BigInteger

That's what I'm working on.  Reply With Quote

19. Member Join Date
Dec 2011
Posts
12
Rep Power
0

## Re: Get first 40 digits of a BigInteger

Sorry, I closed the division program and later reopened it and modified it to create this string program. I can of course re-write it but I must go now. I'll check here later, please post a solution if you find any. Thanks a lot for your time and help, bye for now.  Reply With Quote

20. ## Re: Get first 40 digits of a BigInteger

I'll wait for your post of the division code  Reply With Quote

bignum, java 