Gå til innhold

Anbefalte innlegg

Dette er et program (som tittelen tilsier) som faktoriserer de tallene du gir den.

 

Dette programmet har visse begrensninger, det vil ikke kunne faktorisere tallet korrekt hvis:

-tallet som ble tastet inn har mer enn fire faktorer av samme siffer

-tallet som ble tastet inn har en faktor som er større enn 139

 

Dette kan enkelt fikses, men jeg har helt enkelt ikke giddet.

Jeg vil gjerne ha tilbakemelding om hva dere synes om det, evt gi noen forslag til endring/forbedring.

 

Credit går til Supernerden og meg, Velena.

 

Nedlasting:

http://files.filefront.com/faaactorexe/;98...;/fileinfo.html

Lenke til kommentar
Videoannonse
Annonse

Jeg kjører ikke uten videre en fremmed exe funnet på nettet. Vil du ha tilbakemeldinger så blir det på koden og da må du gi oss den.

 

Men for noen merkelige begrensninger... Og merkelig å lage et program som gjør noe jeg selv bruker 2 linjer Python til... *uten* alle disse begrensningene.

Lenke til kommentar

Ikke noe slemt i .EXE fila, bare snill kode der :thumbup: Reflector :love:

 

 

private int[] thePrimeNums = new int[] { 
	2, 3, 5, 7, 11, 13, 0x11, 0x13, 0x17, 0x1d, 0x1f, 0x25, 0x27, 0x29, 0x2b, 0x2f, 
	0x33, 0x35, 0x3b, 0x3d, 0x43, 0x47, 0x49, 0x4f, 0x53, 0x59, 0x5b, 0x61, 0x65, 0x67, 0x6b, 0x71, 
	0x7f, 0x83, 0x89, 0x8b
 };

private void button1_Click(object sender, EventArgs e)
{
	if (this.textBox1.Text == "")
	{
		this.label1.Text = "You must choose a number first.";
		this.label2.Text = "and type it in the textbox.";
		this.label4.Text = "??";
	}
	else
	{
		this.aNum = this.textBox1.Text;
		this.aNumToFactorize = int.Parse(this.aNum);
		this.factorList = "";
		this.aPrime = 0;
		while (this.aPrime < this.thePrimeNums.Length)
		{
			if ((this.aNumToFactorize % this.thePrimeNums[this.aPrime]) == 0)
			{
				this.factorList = this.factorList + this.thePrimeNums[this.aPrime].ToString() + " ,";
				int num = this.aNumToFactorize / this.thePrimeNums[this.aPrime];
				if ((num % this.thePrimeNums[this.aPrime]) == 0)
				{
					this.factorList = this.factorList + this.thePrimeNums[this.aPrime].ToString() + " ,";
					int num2 = num / this.thePrimeNums[this.aPrime];
					if ((num2 % this.thePrimeNums[this.aPrime]) == 0)
					{
						this.factorList = this.factorList + this.thePrimeNums[this.aPrime].ToString() + " ,";
						int num3 = num2 / this.thePrimeNums[this.aPrime];
						if ((num3 % this.thePrimeNums[this.aPrime]) == 0)
						{
							this.factorList = this.factorList + this.thePrimeNums[this.aPrime].ToString() + " ,";
						}
					}
				}
			}
			if (int.Parse(this.aNum) == this.thePrimeNums[this.aPrime])
			{
				this.label4.Text = "this number is a prime number";
			}
			this.aPrime++;
		}
		this.label4.Text = this.factorList;
	}
}

Endret av jorn79
Lenke til kommentar
Ikke noe slemt i .EXE fila, bare snill kode der :thumbup: Reflector :love:

Sitter i Linux nå og Reflector fungerer ikke med min versjon av Mono. Hadde jeg giddi å boote skulle jeg selvsagt lutzet den og tatt en titt ;)

 

Edit: ser jo nå at den første kommentaren min kan virke noe krass når jeg får bekreftet at koden er clean ;) Menmen...

Endret av steingrim
Lenke til kommentar

Du kunne jo brukt en av de online virusscannerne (tror det er en som heter viruscheif ) om du er så engstelig

for å få pcen din infisert ;). Grunnen til at programmet er begrenset til 4 faktorer av et siffer, er at jeg ikke

har lagt inn flere sjekker for dette. Når det gjelder at den høyeste faktoren må være 139, er det fordi

jeg ble mer og mer usikker på om de tallene jeg la i thePrimeNums faktisk var primtall jo høyere jeg kom, så istedet for å legge til et tall som kunne være faktoriserbart stoppet jeg der. Kan sjekke wikipedia for noen høyere primtall når jeg gidder.

Endret av Velena
Lenke til kommentar
Du kunne jo brukt en av de online virusscannerne (tror det er en som heter viruscheif ) om du er så engstelig

for å få pcen din infisert ;).

 

Hehe. Beklager, men det hjelper kun om EXE filen inneholder et "kjent" virus. Fila kan jo gjøre alt mulig slags skade uten å bli detektert av virusscannere.

Lenke til kommentar
Tenkte ikke på det, men hvis det er slik er ikke de scannerne halvparten så praktiske som jeg trodde.

 

Stemmer. Du får MYE bedre sikkerhet ved å faktisk bruke de små grå for å vurdere det du laster ned fra nettet, klikker på i epost'er, osv... Og så hjelper det å bruke en virtuell PC når man tester ting man er usikker på.

 

Jeg kjører antivirus manuelt ca. en gang pr. måned når jeg føler for det, men har ikke noen automatisk sjekking. Nå er det vel godt over 10 år siden jeg har hatt noe virus eller andre ulumskheter. Forrige gang jeg hadde det var da jeg var liten gutt og kopierte masse spill på disketter :)

 

Men firewall og hodet på rett plass må man ha...

Endret av jorn79
Lenke til kommentar
  • 2 uker senere...

Programmet virker visst bare på små tall, og kommaplasseringen er litt merkelig.

 

Disse tallene testet jeg og fikk feil svar (resultat på andre linje):

13195

5 ,7 ,13 ,29 ,91 ,

 

65491

79 ,

 

456841

7 ,11 ,17 ,

 

26463

3 ,

Endret av trygveaa
Lenke til kommentar

Som jeg har sagt virker ikke programmet på tall som har faktorer større enn 139. Bortsett fra det ser jeg èn feil jeg har gjort, 91 er åpenbart ikke et primtall (delbart med 7 og 13). Bare fjern det fra thePrimeNums. Hvis du har lyst kan du også legge til disse primtallene:

  149    151    157    163    167    173 
  179    181    191    193    197    199    211    223    227    229 
  233    239    241    251    257    263    269    271    277    281 
  283    293    307    311    313    317    331    337    347    349 
  353    359    367    373    379    383    389    397    401    409 
  419    421    431    433    439    443    449    457    461    463 
  467    479    487    491    499    503    509    521    523    541 
  547    557    563    569    571    577    587    593    599    601 
  607    613    617    619    631    641    643    647    653    659 
  661    673    677    683    691    701    709    719    727    733 
  739    743    751    757    761    769    773    787    797    809 
  811    821    823    827    829    839    853    857    859    863 
  877    881    883    887    907    911    919    929    937    941 
  947    953    967    971    977    983    991    997   1009   1013 
 1019   1021   1031   1033   1039   1049   1051   1061   1063   1069 
 1087   1091   1093   1097   1103   1109   1117   1123   1129   1151 
 1153   1163   1171   1181   1187   1193   1201   1213   1217   1223 
 1229   1231   1237   1249   1259   1277   1279   1283   1289   1291 
 1297   1301   1303   1307   1319   1321   1327   1361   1367   1373 
 1381   1399   1409   1423   1427   1429   1433   1439   1447   1451 
 1453   1459   1471   1481   1483   1487   1489   1493   1499   1511 
 1523   1531   1543   1549   1553   1559   1567   1571   1579   1583 
 1597   1601   1607   1609   1613   1619   1621   1627   1637   1657 
 1663   1667   1669   1693   1697   1699   1709   1721   1723   1733 
 1741   1747   1753   1759   1777   1783   1787   1789   1801   1811 
 1823   1831   1847   1861   1867   1871   1873   1877   1879   1889 
 1901   1907   1913   1931   1933   1949   1951   1973   1979   1987 
 1993   1997   1999   2003   2011   2017   2027   2029   2039   2053 
 2063   2069   2081   2083   2087   2089   2099   2111   2113   2129 
 2131   2137   2141   2143   2153   2161   2179   2203   2207   2213 
 2221   2237   2239   2243   2251   2267   2269   2273   2281   2287 
 2293   2297   2309   2311   2333   2339   2341   2347   2351   2357 
 2371   2377   2381   2383   2389   2393   2399   2411   2417   2423 
 2437   2441   2447   2459   2467   2473   2477   2503   2521   2531 
 2539   2543   2549   2551   2557   2579   2591   2593   2609   2617 
 2621   2633   2647   2657   2659   2663   2671   2677   2683   2687 
 2689   2693   2699   2707   2711   2713   2719   2729   2731   2741 
 2749   2753   2767   2777   2789   2791   2797   2801   2803   2819 
 2833   2837   2843   2851   2857   2861   2879   2887   2897   2903 
 2909   2917   2927   2939   2953   2957   2963   2969   2971   2999 
 3001   3011   3019   3023   3037   3041   3049   3061   3067   3079 
 3083   3089   3109   3119   3121   3137   3163   3167   3169   3181 
 3187   3191   3203   3209   3217   3221   3229   3251   3253   3257 
 3259   3271   3299   3301   3307   3313   3319   3323   3329   3331 
 3343   3347   3359   3361   3371   3373   3389   3391   3407   3413 
 3433   3449   3457   3461   3463   3467   3469   3491   3499   3511 
 3517   3527   3529   3533   3539   3541   3547   3557   3559   3571
Tatt fra wikipedia.....

Det skulle øke nøyaktigheten dens betraktelig ^-^.

Endret av Velena
Lenke til kommentar
  • 2 uker senere...

Int primeCheck = 0;
Bool  noPrime = false;
Int []thePrimeNums;

for ( i=1; i<10000;i++)
 {
  For (primeCheck =i ; primeCheck>0; primeCheck--)
      {
       If((i%primeCheck)==0)
         {
          if (primeCheck == 1)
            {}
          else
            {
             if (primeCheck==i)
               {}
             else
              {
            noPrime ==true;
            break;
               }
             }
          }
      }
   If (noPrime==true)
    {}
   Else
    {
      thePrimeNums+=i + “, ”;
    }
}

Dette er en loop som forhåpentligvis finner alle primtallene fra 1 til 10000. Var det dette du mente?

Endret av Velena
Lenke til kommentar

Int primeCheck = 0;
Bool noPrime = false;
Int []thePrimeNums;

for ( i=1; i<10000;i++)
{
  if (!i==2 && (i%2)==0)
  {
   noPrime=true;
  }
  else
  {
    For (primeCheck =i/2 ; primeCheck>0; primeCheck-2) /*husker ikke funksjonen for å runde av, så dette ble ikke helt riktig =/*/
    {
       If((i%primeCheck)==0)
       {
          if (primeCheck == 1)
          {}
          else
          {
              noPrime = true;
              break;
          }
       }
    }
  }
  If (noPrime==true)
  {}
  Else
  {
   thePrimeNums+=i + “, ”;
   noPrime=false;
  }
}

Ble dette bedre da? :!: .

Endret av Velena
Lenke til kommentar

Int primeCheck = 0;
Bool noPrime = false;
Int []thePrimeNums;
int halfi;
int halfi2;

for ( i=1; i<10000;i++)
{
    halfi=Math.Floor(double.parse(i*0.5));
    halfi2=i*0.5;
    if (i!=2 && halfi2-halfi==0)
    {
         noPrime=true;
    }
    else
   {
         For (primeCheck = Math.Floor(double.parse(i*0.5)) ; primeCheck>0; primeCheck-2) 
        {
            If((i%primeCheck)==0)
            {
                if (primeCheck == 1)
                {}
                else
                {
                     noPrime = true;
                     break;
                }
           }
       }
   }
   If (noPrime==true)
   {}
   Else
   {
       thePrimeNums+=i + “, ”;
       noPrime=false;
    }
}

Nå inneholder koden bare en modulus, men jeg er usikker på om den er mer effektiv.

Endret av Velena
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...