Jump to content
Sign in to follow this  
encik pot pet

Mengira Hasil Tambah Dari 1-1m

Recommended Posts

Sebenarnya ni bukan programming sangat sebab kalau setakat nak kira hasil tambah 1+2+3+4+....+1000000 senang jer pakai komputer.

contoh kalau sampai 100;

int sum = 0;
int i = 1;
for (i = 1; i <= 100; i++)
    sum +=i;

Kalau korang duk zaman tahun 1600(masa tu takde lagi komputer), agak2nya camner nak mengira hasil tambah dari 1 hingga 1M or 1B dengan cepat?

Soalannya; sila terbitkan satu formula/algo utk mengira hasil tambah 1 hingga 1M.

chow

Share this post


Link to post
Share on other sites

mmg dapat 5050.saya dah test dah guna formula saya dan compare dengan jawapan dari code c yg encik pot pet bagi tu .jawapan saya betul dari 10,100,dan 1000.Sampai 10000 je,pastu jawapan dari code dah lain dari formula saya.Saya rasa mungkin sebab int tak boleh tampung jawapan tu sbb besar sangat ,so saya try guna unsigned int baru dapat jawapan betul dgn formula saya iaitu 50005000.Tapi utk 100000 tak dapat lagi kalau guna code.Kalau boleh encik pot pet boleh tak tunjukkan code yg boleh kirakan hasil tambah 1-100000 dan gandaan sepuluh lagi besar.Saya baru lagi dalam c ni.. :)

Share this post


Link to post
Share on other sites

kalau guna computer x86 ni, int size dia cuma 32 bit jer, 0xFFFFFFFF bersamaan dgn 4 billion lebih. kalau nak kira nilai lagi besar kena code bignum library sendiri atau guna org lain punya seperti http://gmplib.org/

btw, saya punya algo valid utk 1 -> infinity, will u derive it?

hint: http://www-groups.dcs.st-and.ac.uk/~histor...hies/Gauss.html :)

edit: aku biasanya pakai MIRACL http://www.shamus.ie/index.php?page=home

Edited by encik pot pet

Share this post


Link to post
Share on other sites

Bukan ke ade Janjang Arimetik?

Sn = n/2 (a + l)

@

Sn = n/2 (2a + (n-1)d)

max size bagi int data type = –2,147,483,648 to 2,147,483,647

unsigned int seperti en zeph ckp = 0xFFFFFFFF (0 to 4,294,967,295)

lagi satu ade __int64

__int64 = –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

unsigned __int64 = 0xFFFFFFFFFFFFFFFF (0 to 18,446,744,073,709,551,615)

Share this post


Link to post
Share on other sites

sementara duk sorang2 ari raya ni terlebih cuti.. saya ambil kesempatan untuk buat simple program berdasarkan formula arithmetic series yang rasanya ramai orang tau kan?? (lihat post Stranger).. tapi setakat ni gunakan gmp library sebagai contoh..

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>

int main(int argc, char *argv[])
{
  mpz_t total, temp, n;
  if (argc != 2) {
    printf("Usage : sum n\n\tn can be integer of any size\n\n");
    return EXIT_SUCCESS;
  }
  if (mpz_init_set_str(n, argv[1], 10)) {
    printf("n must be a valid integer value!\n");
    return EXIT_FAILURE;
  }
  mpz_init(total);
  mpz_add_ui(total, n, 1);
  mpz_mul(total, total, n);
  mpz_tdiv_q_ui(total, total, 2);
  gmp_printf("sum[1,%Zd] = %Zd\n", n, total);
  return EXIT_SUCCESS;
}

Share this post


Link to post
Share on other sites

sementara duk sorang2 ari raya ni terlebih cuti.. saya ambil kesempatan untuk buat simple program berdasarkan formula arithmetic series yang rasanya ramai orang tau kan?? (lihat post Stranger).. tapi setakat ni gunakan gmp library sebagai contoh..

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>

int main(int argc, char *argv[])
{
  mpz_t total, temp, n;
  if (argc != 2) {
    printf("Usage : sum n\n\tn can be integer of any size\n\n");
    return EXIT_SUCCESS;
  }
  if (mpz_init_set_str(n, argv[1], 10)) {
    printf("n must be a valid integer value!\n");
    return EXIT_FAILURE;
  }
  mpz_init(total);
  mpz_add_ui(total, n, 1);
  mpz_mul(total, total, n);
  mpz_tdiv_q_ui(total, total, 2);
  gmp_printf("sum[1,%Zd] = %Zd\n", n, total);
  return EXIT_SUCCESS;
}

Jujur katakan, aku memang tak mahir dengan C. So, just curious, apa dia punya running time eh? B)

Share this post


Link to post
Share on other sites

running time? measure sendiri laa :).. lekat time kat depan, e.g

#time sum 28471289641782647152641725412471254751274125686591274912749712894719279748921784612

dalam machine saya, tak kira berapa besar nombor (limited by console buffer) output keluar immediately.

Share this post


Link to post
Share on other sites

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>

benda nie aper yer? kena tulis ker setiap kali buat program?? kalau x masukkan, boleh ker/??

Edited by dukun

Share this post


Link to post
Share on other sites

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>

benda nie aper yer? kena tulis ker setiap kali buat program?? kalau x masukkan, boleh ker/??

kengkadang kalau tak letak mende tu, pastu kompile, dier akan kluar msg error..

so pastikan tak tertinggal fungsi2 tersebut. :lol:

Share this post


Link to post
Share on other sites

ni yang kita panggil sebagai preprocessor directives. Contohnya #include directive membolehkan awak masukkan (gunakan) source file lain pada line tersebut. So bila awak buat "#include <stdio.h> misalnya, awak basically masukkan isi fail stdio.h (lokasinya bergantung kepada bagaimana pengkompil awak dipasang) menggantikan line #include tu.. Ni membolehkan kita seperate source files, so benda2 macam symbolic constants kita bleh masukkan dalam header files (*.h) dan boleh di"#include" oleh mana2 source file yang memerlukan definisinya. Dalam contoh kod di atas, ia membolehkan kita gunakan simbol EXIT_SUCCESS, fungsi mpz_init dan sebagainya.. sebab headers yang kita masukkan dalam source kita dah define/declare untuk kita.

Share this post


Link to post
Share on other sites

Kita panggil sebagai preprocessor directives.

Contohnya #include directive membolehkan awak masukkan (gunakan) source file lain pada line tersebut.

So, bila awak buat "#include <stdio.h> misalnya, awak basically masukkan isi kandungan fail stdio.h

(lokasinya bergantung kepada bagaimana pengkompil awak dipasang) menggantikan line #include tu..

Ini membolehkan kita seperate source files, so benda-benda seperti symbolic constants kita boleh masukkan

dalam header files (*.h) dan boleh di"#include" oleh mana2 source file yang memerlukan definisinya.

Dalam contoh kod di atas, ia membolehkan kita gunakan simbol EXIT_SUCCESS, fungsi mpz_init dan sebagainya..

sebab headers yang kita masukkan dalam source kita dah define/declare untuk kita.

Credit : Paralys3r

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...