---
title: "Hjälp med BigInteger"
type: "forum-thread"
url: "https://www.webforum.nu/amne/java/110515-hjälp-med-biginteger"
topic: "Java"
topic_url: "https://www.webforum.nu/amne/java"
author: "kobranturre"
published: "2004-09-01T13:37:03.000Z"
updated: "2004-09-01T17:35:45.000Z"
replies: 9
views: 462
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/java/110515-hjälp-med-biginteger"
---

# Hjälp med BigInteger

## #1 — kobranturre, 2004-09-01T13:37Z

Jag försöker lära mig hu BigInteger används men det går helt fel

```
import java.math.BigInteger; 

public class Problem10{
	public static void main(String[] args){
	int c = 0;
	int d = 0;
	int e = 0;
	BigInteger f = new BigInteger("2");
		for (int a = 3; a < 1000000000; a++){
		e = 0;
			for (int b = 2; b < a; b++){
				if (a % b == 0){
				c = 1;
				}
				else{
				c = 0;
				}
				e += c;
				
			}
				if (e == 0){
					if (a < 1000000){
						f += a;
						System.out.println(f);
					}
				}
		}
	}
}
```

Permalänk: https://www.webforum.nu/p/110515

## #2 — Mc Fetto, 2004-09-01T14:02Z

Hm, vet inte vad det är du vill göra men du kan inte lägga ihop en BigInteger med en int, du får konvertera/skapa en BigInteger av din int först. Sedan kan du addera dem.

Permalänk: https://www.webforum.nu/p/1425438

## #3 — kobranturre, 2004-09-01T14:11Z

Grejen koden gör är att addera alla primtal under 1 000 000 med varandra.

Denna kod funkar inte:

```
import java.math.BigInteger; 

public class Problem10{
	public static void main(String[] args){
	int c = 0;
	int d = 0;
	int e = 0;
	BigInteger b = new BigInteger("2");
	BigInteger a = new BigInteger("3");
	BigInteger f = new BigInteger("2");
		for (; a < 1000000000; a++){
		e = 0;
			for (; b < a; b++){
				if (a % b == 0){
				c = 1;
				}
				else{
				c = 0;
				}
				e += c;
				
			}
				if (e == 0){
					if (a < 1000000){
						f += a;
						System.out.println(f);
					}
				}

		}
	}
}
```

Problem10.java:11: operator \< cannot be applied to java.math.BigInteger,int
for (; a \< 1000000000; a++){
........^
Problem10.java:11: operator ++ cannot be applied to java.math.BigInteger
for (; a \< 1000000000; a++){
........................^
Problem10.java:13: operator \< cannot be applied to java.math.BigInteger,java.math.BigInteger
for (; b \< a; b++){
.........^
Problem10.java:13: operator ++ cannot be applied to java.math.BigInteger
for (; b \< a; b++){
...............^
Problem10.java:14: operator % cannot be applied to java.math.BigInteger,java.math.BigInteger
if (a % b == 0){
......^
Problem10.java:24: operator \< cannot be applied to java.math.BigInteger,int
if (a \< 1000000){
......^
Problem10.java:25: operator + cannot be applied to java.math.BigInteger,java.math.BigInteger
f += a;
..^
7 errors

Permalänk: https://www.webforum.nu/p/1425447

## #4 — Mc Fetto, 2004-09-01T14:16Z

Nej, biginteger är ju inte samma sak som integer...
Men ifrån din första post där du försöker addera f och a, får du helt enkelt skapa en ny bigint med värdet av a. Sedan adderar du ihop dem med BigInteger.add()

Permalänk: https://www.webforum.nu/p/1425451

## #5 — kobranturre, 2004-09-01T16:06Z

Har fått koden att funka som jag vill (tror jag). Jag skulle vilja effektivisera koden. Göra den snabbare och "normalare". Vad kan man ändra på den:

```
import java.math.BigInteger; 

public class Problem10{
	public static void main(String[] args){
	int c = 0;
	int d = 0;
	int e = 0;
	BigInteger i = new BigInteger("1");
	BigInteger f = new BigInteger("2");
	BigInteger h = new BigInteger("2");
			for (int a = 3; a < 1000000000; a++){
			h = h.add(i);
			e = 0;
				for (int b = 2; b < a; b++){
					if (a % b == 0){
					c = 1;
					}
					else{
					c = 0;
					}
				e += c;
				
				}
				if (e == 0){
					if (a < 1000000){
						f = f.add(h);
						System.out.println(f + "\t" + a);
					}
				}
		}
	}
}
```

Permalänk: https://www.webforum.nu/p/1425510

## #6 — Mc Fetto, 2004-09-01T16:45Z

du missar ett primtal... det första :)

Permalänk: https://www.webforum.nu/p/1425531

## #7 — kobranturre, 2004-09-01T17:01Z

nepp ... Det är därför BigInteger f har startvärdet 2 (vilket är det första primtalet) ;)

Permalänk: https://www.webforum.nu/p/1425540

## #8 — Mc Fetto, 2004-09-01T17:10Z

jag har inte kollat din kod men, 2:an skrivs ivf inte ut (kanske den inte ska heller)?

Permalänk: https://www.webforum.nu/p/1425547

## #9 — kobranturre, 2004-09-01T17:14Z

Den behöver inte skrivas ut. Jag antar att du säger så pga int a 

Anledningen till att den skriver ut int a är pga att jag bara ville se hur lång tid det skulle ta och köra koden tills det att jag fått det sista värdet på f. Men min kod är slö och det gör att det tog ngn timme att komma upp i primtal som är runt 200000. Vilket betyder att det skulle ta massor med tid att vänta tills den kom upp i 1000000 (+ att jag märkte att den blev slöare). Thats why Im turning to wf. Skulle vilja snabba upp koden.

Permalänk: https://www.webforum.nu/p/1425549

## #10 — nitro2k01, 2004-09-01T17:35Z

Problemet är att du inte kan använda de vanliga operatorerna(+-\*/) på BigIntegers. Du måste använda metoderna add, multiply osv. (xxx = xxx.add(new BigInteger("5")); istället för xxx += 5; )
[Mer info i Java's officiella dokumentation](http://java.sun.com/j2se/1.4.2/docs/api/java/math/BigInteger.html) 

Men annars förstår jag inte varför du ska använda en BigInteger alls? En long räcker bra, och kan lagra tal upp till 9 triljoner, så det borde inte vara något problem att använda long till alla variabler.

På tal om att optimera: Du kan byte ut 

```
for (int b = 2; b < a; b++){
```

 mot 

```
for (int b = 2; b < Math.sqrt(a); b++){
```

 eftersom ett tal inte kan ha någon divisor som är större än sin kvadratrot.

Permalänk: https://www.webforum.nu/p/1425559

---

Tråden på webben: https://www.webforum.nu/amne/java/110515-hjälp-med-biginteger
