Tuesday, November 2, 2010

അഭാജ്യ സംഖ്യയാണോ എന്നറിയാന്‍ ഒരു C function

തന്നിരിക്കുന്ന അക്കം ഒരു അഭാജ്യ സംഖ്യ (pime number ) ആണോ എന്നറിയാന്‍ ഒരു ചെറിയ C function താഴെ കൊടുക്കുന്നു.

int IsPrime(unsigned int num)
{
int count;
if (num%2 == 0) return (num == 2);
for (count = 3; count*count<=num; count+=2)
{
if ((num%count) == 0) return 0;
}
return 1;
}

ഈ function , തന്നിരിക്കുന്ന സംഖ്യ അഭാജ്യ സംഖ്യ ആണെങ്കില്‍ 1 മടക്കി നല്‍കുന്നു. അഭാജ്യ സംഖ്യ അല്ലെങ്കില്‍ 0 മടക്കി നല്‍കുന്നു. നിരവധി optimaisation വരുത്തിയ ഒരു code ആണ് ഇത്. പ്രോഗ്രാമിന്‍റെ യുക്തികള്‍ പരിശോധിക്കാം
1 ) ഇരട്ട സംഖ്യകളില്‍ 2 മാത്രമാണ് അഭാജ്യ സംഖ്യ. if (num%2 == 0) return (num == 2); എന്ന കോഡ് ഈ യുക്തിയെ ഉപയോഗപ്പെടുത്തിയിരിക്കുന്നു. രണ്ടു അല്ലാത്ത ഇരട്ടസംഖ്യ ആണ് തന്നിരിക്കുന്നതെങ്കില്‍, വേറെ ഒന്നും നോക്കേണ്ടതില്ല, സംഖ്യ ഭാജ്യ സംഖ്യ ആണെന്ന് നിസ്സംശയം പറയാം.
2 ) ഇരട്ട സംഖ്യ അല്ലെങ്കില്‍ തന്നിരിക്കുന്ന സംഖ്യ,
a ) 3 , 5 , 7 , 9 തുടങ്ങിയ ഒറ്റ സംഖ്യകളുടെ ഗുണിതം ആണോ എന്ന് പരിശോധിക്കുക, ആണെങ്കില്‍ അത് ഭാജ്യ സംഖ്യ ആണെന്ന് ഉറപ്പിക്കാം. ഇരട്ട സംഖ്യകളുടെ ഗുണിതം എന്നും ഇരട്ട സംഖ്യ തന്നെ ആയിരിക്കും എന്നതിനാല്‍ 2 , 4 , 6 , 8 തുടങ്ങിയ ഇരട്ട സംഖ്യകളുടെ ഗുണിതം ആണോ എന്ന് പരിശോധിക്കേണ്ടതില്ല. (ഇരട്ട സംഖ്യകളുടെ വിധി നമ്മള്‍ ( 1 ) ല്‍ തീരുമാനിച്ചിട്ടുണ്ട്) .
b ) സംഖ്യയുടെ വര്‍ഗമൂലം (square root ) വരെയുള്ള അക്കങ്ങളുടെ ഗുണിതം ആണോ എന്ന് പരിശോധിച്ചാല്‍ മതി. അത് വരെയുള്ള ഒരു അക്കത്തിന്‍റെയും ഗുണിതം അല്ലെങ്കില്‍ നിസ്സംശയം പറയാം, സംഖ്യ അഭാജ്യ സംഖ്യ ആണ്.

സാധാരണയായി കാണാറുള്ള പ്രോഗ്രാമുകളില്‍ മുകളിലുള്ള യുക്തികള്‍ കാണാറില്ലാത്തതിനാല്‍ അവ വളരെ അധികം സമയം എടുക്കും, പ്രത്യേകിച്ച് വലിയ സംഖ്യകള്‍ പരിശോധിക്കുമ്പോള്‍.
നിങ്ങളുടെ ആടുത്ത് സാധാരണ യുക്തിയിലുള്ള ഒരു C function ഉണ്ടെങ്കില്‍, അതില്‍ 15485863 ഒരു അഭാജ്യ സംഖ്യ ആണോ എന്ന് പരിശോധിക്കൂ. പിന്നീട് ഈ പ്രോഗ്രാം ഉപയോഗിച്ച് ഉത്തരത്തിന് എടുക്കുന്ന സമയം താരതമ്യപെടുത്തി നോക്കൂ.

2 comments:

  1. software engineerമാര്‍ program മാത്രമേ എഴുതാവൂ എന്ന് നിയമമൊന്നുമില്ല. :-)
    കൂടുതല്‍ പോസ്റ്റുകള്‍ പ്രതീക്ഷിക്കുന്നു

    ReplyDelete
  2. പ്രോഗ്രാമിങ്ങിനെ പറ്റിയോ സ്ക്രിപ്ടിങ്ങിനെ പറ്റിയോ ഒരക്ഷരം അറിയാത്തവനായത് കൊണ്ട് തീര്‍ത്തും നിഷ്കളങ്കമായി ..എന്നാല്‍ ആത്മാര്‍ഥമായി ഒരു അപേക്ഷ ഇവിടെ അറിയിക്കുന്നു..
    പ്രോഗ്രാമിങ്ങിന്റെ ഒന്നാം ക്ലാസ്സ്‌ സിലബസ്‌ എന്ന നിലക്ക് അതിനെ ഈയുള്ളവനെ പോലെയുള്ളവര്‍ക്ക് പരിചയപ്പെടുത്തുന്ന ഒരു പോസ്റ്റ്‌ പ്രസിദ്ധീകരിച്ചു കൂടെ..?
    ബാലപാഠങ്ങള്‍ അറിയാത്തത് കൊണ്ട് സ്ക്രിപ്ടിംഗ് ചെയ്യേണ്ട പല സ്ഥലത്തും മടിച്ചു നിന്നിട്ടുണ്ട്.ഫ്ലാഷില്‍ ആക്ഷന്‍ സ്ക്രിപ്റ്റ്‌ ചെയ്യേണ്ടി വരുന്ന സമയത്ത് സുഹൃത്തിനെ ആശ്രയിക്കാരാണ് പതിവ്.
    സ്വന്തമായി പഠിക്കാവുന്ന ഒരു സംഗതിയാണോ ഇത്?
    അതോ ഒരു ഗുരുവിനെ കൂടാതെ അസാധ്യമായതാണോ?
    പ്രോഗ്രാമിംഗ് ചെയ്യാന്‍ വേണ്ടിയിട്ടല്ലെങ്കിലും പല വട്ടം ഇതിന്റെ 'ഗുട്ടന്‍സ്‌' പിടികിട്ടാന്‍ പലയിടത്തും തപ്പിയിട്ടുണ്ട്.
    പ്രോഗ്രമിങ്ങിലെ നിരക്ഷരര്‍ക്ക് വേണ്ടി ഒരു പോസ്റ്റ്‌ പ്രസിദ്ധീകരിച്ചാല്‍ അറിയിക്കണം.

    ReplyDelete