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 ഒരു അഭാജ്യ സംഖ്യ ആണോ എന്ന് പരിശോധിക്കൂ. പിന്നീട് ഈ പ്രോഗ്രാം ഉപയോഗിച്ച് ഉത്തരത്തിന് എടുക്കുന്ന സമയം താരതമ്യപെടുത്തി നോക്കൂ.