-module(prim_helper). -export([isPrim/1, range/2, range/3, unix_timestamp/0, sign/1, sleep/1, string_format/2, log/2, log/3, getFileSize/1, getNextLogNum/1]). -include_lib("kernel/include/file.hrl"). % simple algorithm, return true/false atom isPrim(X) when X < 2 -> false; isPrim(X) -> isPrimHelper(X, 2, -1). isPrimHelper(X, N) -> if X < N*N -> true; (X rem N) == 0 -> false; true -> isPrimHelper(X, N+1) end. isPrimHelper(X, 2, _) -> if (X rem 2) == 0 -> false; (X rem 3) == 0 -> false; (X rem 5) == 0 -> false; (X rem 7) == 0 -> false; (X rem 11) == 0 -> false; true -> isPrimHelper(X, 13, 2) end; isPrimHelper(X, N, S) -> if X < N*N -> true; (X rem N) == 0 -> false; true -> isPrimHelper(X, N + nextStep(S), ((S+1) rem 480)) end. % [From .. To] range(From, To) when From range(From, To, 1); range(From, To) when From>=To -> range(To, From, -1). range(_, _, 0) -> % deppen -.- []; range(From, From, _) -> [From]; range(From, To, Step) -> if ((To-From) > 0) /= (Step > 0) -> []; true -> [From] ++ range(From+Step, To, Step) end. %uneven_range(From, To) -> % range(From+zeroToOne(From), To+zeroToOne(To)). % %uneven_range(From, To, Step) -> % range(From+zeroToOne(From), To+zeroToOne(To), Step). % %ZeroToOne = fun(X) -> if X==0 -> 1; true -> 0 end end. %zeroToOne(X) -> % Mod = rem(X, 2), % if % Mod==0 -> 1; % true -> 0 % end. % unix timestamp unix_timestamp() -> {Mega, Secs, _} = now(), Mega * 1000000 + Secs. string_format(Pattern, Values) -> lists:flatten(io_lib:format(Pattern, Values)). log(File, Msg) -> log(File, Msg, []). log(File, Msg, Param) -> {{Y, M, D}, {H, I, S}} = {date(), time()}, NewMsg = string_format("[~2..0B.~2..0B.~w ~2..0B:~2..0B:~2..0B] " ++ Msg ++ "~n", [D, M, Y, H, I, S] ++ Param), file:write(File, NewMsg). % signum function sign(X) -> if X>0 -> 1; X==0 -> 0; X<0 -> -1 end. sleep(N) -> receive after N -> true end. % get the file size getFileSize(Filename) -> case file:read_file_info(Filename) of {ok, FS} -> FS#file_info.size; {error, _} -> -1 end. getNextLogNum(Dir) -> {ok, List} = file:list_dir(Dir), Nums = [0] ++ lists:map(fun getNextLogFilterFunc/1, List), lists:max(Nums) + 1. getNextLogFilterFunc(Path) -> case re:run(Path, "^[0-9]+",[{capture, first, list}]) of nomatch -> 0; {match, [Num]} -> list_to_integer(Num) end. nextStep(0) -> 2; nextStep(1) -> 12; nextStep(2) -> 4; nextStep(3) -> 2; nextStep(4) -> 4; nextStep(5) -> 6; nextStep(6) -> 2; nextStep(7) -> 6; nextStep(8) -> 4; nextStep(9) -> 2; nextStep(10) -> 4; nextStep(11) -> 6; nextStep(12) -> 6; nextStep(13) -> 2; nextStep(14) -> 6; nextStep(15) -> 4; nextStep(16) -> 2; nextStep(17) -> 6; nextStep(18) -> 4; nextStep(19) -> 6; nextStep(20) -> 8; nextStep(21) -> 4; nextStep(22) -> 2; nextStep(23) -> 4; nextStep(24) -> 2; nextStep(25) -> 4; nextStep(26) -> 14; nextStep(27) -> 4; nextStep(28) -> 6; nextStep(29) -> 2; nextStep(30) -> 10; nextStep(31) -> 2; nextStep(32) -> 6; nextStep(33) -> 6; nextStep(34) -> 4; nextStep(35) -> 2; nextStep(36) -> 4; nextStep(37) -> 6; nextStep(38) -> 2; nextStep(39) -> 10; nextStep(40) -> 2; nextStep(41) -> 4; nextStep(42) -> 2; nextStep(43) -> 12; nextStep(44) -> 10; nextStep(45) -> 2; nextStep(46) -> 4; nextStep(47) -> 2; nextStep(48) -> 4; nextStep(49) -> 6; nextStep(50) -> 2; nextStep(51) -> 6; nextStep(52) -> 4; nextStep(53) -> 6; nextStep(54) -> 6; nextStep(55) -> 6; nextStep(56) -> 2; nextStep(57) -> 6; nextStep(58) -> 4; nextStep(59) -> 2; nextStep(60) -> 6; nextStep(61) -> 4; nextStep(62) -> 6; nextStep(63) -> 8; nextStep(64) -> 4; nextStep(65) -> 2; nextStep(66) -> 4; nextStep(67) -> 6; nextStep(68) -> 8; nextStep(69) -> 6; nextStep(70) -> 10; nextStep(71) -> 2; nextStep(72) -> 4; nextStep(73) -> 6; nextStep(74) -> 2; nextStep(75) -> 6; nextStep(76) -> 6; nextStep(77) -> 4; nextStep(78) -> 2; nextStep(79) -> 4; nextStep(80) -> 6; nextStep(81) -> 2; nextStep(82) -> 6; nextStep(83) -> 4; nextStep(84) -> 2; nextStep(85) -> 6; nextStep(86) -> 10; nextStep(87) -> 2; nextStep(88) -> 10; nextStep(89) -> 2; nextStep(90) -> 4; nextStep(91) -> 2; nextStep(92) -> 4; nextStep(93) -> 6; nextStep(94) -> 8; nextStep(95) -> 4; nextStep(96) -> 2; nextStep(97) -> 4; nextStep(98) -> 12; nextStep(99) -> 2; nextStep(100) -> 6; nextStep(101) -> 4; nextStep(102) -> 2; nextStep(103) -> 6; nextStep(104) -> 4; nextStep(105) -> 6; nextStep(106) -> 12; nextStep(107) -> 2; nextStep(108) -> 4; nextStep(109) -> 2; nextStep(110) -> 4; nextStep(111) -> 8; nextStep(112) -> 6; nextStep(113) -> 4; nextStep(114) -> 6; nextStep(115) -> 2; nextStep(116) -> 4; nextStep(117) -> 6; nextStep(118) -> 2; nextStep(119) -> 6; nextStep(120) -> 10; nextStep(121) -> 2; nextStep(122) -> 4; nextStep(123) -> 6; nextStep(124) -> 2; nextStep(125) -> 6; nextStep(126) -> 4; nextStep(127) -> 2; nextStep(128) -> 4; nextStep(129) -> 2; nextStep(130) -> 10; nextStep(131) -> 2; nextStep(132) -> 10; nextStep(133) -> 2; nextStep(134) -> 4; nextStep(135) -> 6; nextStep(136) -> 6; nextStep(137) -> 2; nextStep(138) -> 6; nextStep(139) -> 6; nextStep(140) -> 4; nextStep(141) -> 6; nextStep(142) -> 6; nextStep(143) -> 2; nextStep(144) -> 6; nextStep(145) -> 4; nextStep(146) -> 2; nextStep(147) -> 6; nextStep(148) -> 4; nextStep(149) -> 6; nextStep(150) -> 8; nextStep(151) -> 4; nextStep(152) -> 2; nextStep(153) -> 6; nextStep(154) -> 4; nextStep(155) -> 8; nextStep(156) -> 6; nextStep(157) -> 4; nextStep(158) -> 6; nextStep(159) -> 2; nextStep(160) -> 4; nextStep(161) -> 6; nextStep(162) -> 8; nextStep(163) -> 6; nextStep(164) -> 4; nextStep(165) -> 2; nextStep(166) -> 10; nextStep(167) -> 2; nextStep(168) -> 6; nextStep(169) -> 4; nextStep(170) -> 2; nextStep(171) -> 4; nextStep(172) -> 2; nextStep(173) -> 10; nextStep(174) -> 2; nextStep(175) -> 10; nextStep(176) -> 2; nextStep(177) -> 4; nextStep(178) -> 2; nextStep(179) -> 4; nextStep(180) -> 8; nextStep(181) -> 6; nextStep(182) -> 4; nextStep(183) -> 2; nextStep(184) -> 4; nextStep(185) -> 6; nextStep(186) -> 6; nextStep(187) -> 2; nextStep(188) -> 6; nextStep(189) -> 4; nextStep(190) -> 8; nextStep(191) -> 4; nextStep(192) -> 6; nextStep(193) -> 8; nextStep(194) -> 4; nextStep(195) -> 2; nextStep(196) -> 4; nextStep(197) -> 2; nextStep(198) -> 4; nextStep(199) -> 8; nextStep(200) -> 6; nextStep(201) -> 4; nextStep(202) -> 6; nextStep(203) -> 6; nextStep(204) -> 6; nextStep(205) -> 2; nextStep(206) -> 6; nextStep(207) -> 6; nextStep(208) -> 4; nextStep(209) -> 2; nextStep(210) -> 4; nextStep(211) -> 6; nextStep(212) -> 2; nextStep(213) -> 6; nextStep(214) -> 4; nextStep(215) -> 2; nextStep(216) -> 4; nextStep(217) -> 2; nextStep(218) -> 10; nextStep(219) -> 2; nextStep(220) -> 10; nextStep(221) -> 2; nextStep(222) -> 6; nextStep(223) -> 4; nextStep(224) -> 6; nextStep(225) -> 2; nextStep(226) -> 6; nextStep(227) -> 4; nextStep(228) -> 2; nextStep(229) -> 4; nextStep(230) -> 6; nextStep(231) -> 6; nextStep(232) -> 8; nextStep(233) -> 4; nextStep(234) -> 2; nextStep(235) -> 6; nextStep(236) -> 10; nextStep(237) -> 8; nextStep(238) -> 4; nextStep(239) -> 2; nextStep(240) -> 4; nextStep(241) -> 2; nextStep(242) -> 4; nextStep(243) -> 8; nextStep(244) -> 10; nextStep(245) -> 6; nextStep(246) -> 2; nextStep(247) -> 4; nextStep(248) -> 8; nextStep(249) -> 6; nextStep(250) -> 6; nextStep(251) -> 4; nextStep(252) -> 2; nextStep(253) -> 4; nextStep(254) -> 6; nextStep(255) -> 2; nextStep(256) -> 6; nextStep(257) -> 4; nextStep(258) -> 6; nextStep(259) -> 2; nextStep(260) -> 10; nextStep(261) -> 2; nextStep(262) -> 10; nextStep(263) -> 2; nextStep(264) -> 4; nextStep(265) -> 2; nextStep(266) -> 4; nextStep(267) -> 6; nextStep(268) -> 2; nextStep(269) -> 6; nextStep(270) -> 4; nextStep(271) -> 2; nextStep(272) -> 4; nextStep(273) -> 6; nextStep(274) -> 6; nextStep(275) -> 2; nextStep(276) -> 6; nextStep(277) -> 6; nextStep(278) -> 6; nextStep(279) -> 4; nextStep(280) -> 6; nextStep(281) -> 8; nextStep(282) -> 4; nextStep(283) -> 2; nextStep(284) -> 4; nextStep(285) -> 2; nextStep(286) -> 4; nextStep(287) -> 8; nextStep(288) -> 6; nextStep(289) -> 4; nextStep(290) -> 8; nextStep(291) -> 4; nextStep(292) -> 6; nextStep(293) -> 2; nextStep(294) -> 6; nextStep(295) -> 6; nextStep(296) -> 4; nextStep(297) -> 2; nextStep(298) -> 4; nextStep(299) -> 6; nextStep(300) -> 8; nextStep(301) -> 4; nextStep(302) -> 2; nextStep(303) -> 4; nextStep(304) -> 2; nextStep(305) -> 10; nextStep(306) -> 2; nextStep(307) -> 10; nextStep(308) -> 2; nextStep(309) -> 4; nextStep(310) -> 2; nextStep(311) -> 4; nextStep(312) -> 6; nextStep(313) -> 2; nextStep(314) -> 10; nextStep(315) -> 2; nextStep(316) -> 4; nextStep(317) -> 6; nextStep(318) -> 8; nextStep(319) -> 6; nextStep(320) -> 4; nextStep(321) -> 2; nextStep(322) -> 6; nextStep(323) -> 4; nextStep(324) -> 6; nextStep(325) -> 8; nextStep(326) -> 4; nextStep(327) -> 6; nextStep(328) -> 2; nextStep(329) -> 4; nextStep(330) -> 8; nextStep(331) -> 6; nextStep(332) -> 4; nextStep(333) -> 6; nextStep(334) -> 2; nextStep(335) -> 4; nextStep(336) -> 6; nextStep(337) -> 2; nextStep(338) -> 6; nextStep(339) -> 6; nextStep(340) -> 4; nextStep(341) -> 6; nextStep(342) -> 6; nextStep(343) -> 2; nextStep(344) -> 6; nextStep(345) -> 6; nextStep(346) -> 4; nextStep(347) -> 2; nextStep(348) -> 10; nextStep(349) -> 2; nextStep(350) -> 10; nextStep(351) -> 2; nextStep(352) -> 4; nextStep(353) -> 2; nextStep(354) -> 4; nextStep(355) -> 6; nextStep(356) -> 2; nextStep(357) -> 6; nextStep(358) -> 4; nextStep(359) -> 2; nextStep(360) -> 10; nextStep(361) -> 6; nextStep(362) -> 2; nextStep(363) -> 6; nextStep(364) -> 4; nextStep(365) -> 2; nextStep(366) -> 6; nextStep(367) -> 4; nextStep(368) -> 6; nextStep(369) -> 8; nextStep(370) -> 4; nextStep(371) -> 2; nextStep(372) -> 4; nextStep(373) -> 2; nextStep(374) -> 12; nextStep(375) -> 6; nextStep(376) -> 4; nextStep(377) -> 6; nextStep(378) -> 2; nextStep(379) -> 4; nextStep(380) -> 6; nextStep(381) -> 2; nextStep(382) -> 12; nextStep(383) -> 4; nextStep(384) -> 2; nextStep(385) -> 4; nextStep(386) -> 8; nextStep(387) -> 6; nextStep(388) -> 4; nextStep(389) -> 2; nextStep(390) -> 4; nextStep(391) -> 2; nextStep(392) -> 10; nextStep(393) -> 2; nextStep(394) -> 10; nextStep(395) -> 6; nextStep(396) -> 2; nextStep(397) -> 4; nextStep(398) -> 6; nextStep(399) -> 2; nextStep(400) -> 6; nextStep(401) -> 4; nextStep(402) -> 2; nextStep(403) -> 4; nextStep(404) -> 6; nextStep(405) -> 6; nextStep(406) -> 2; nextStep(407) -> 6; nextStep(408) -> 4; nextStep(409) -> 2; nextStep(410) -> 10; nextStep(411) -> 6; nextStep(412) -> 8; nextStep(413) -> 6; nextStep(414) -> 4; nextStep(415) -> 2; nextStep(416) -> 4; nextStep(417) -> 8; nextStep(418) -> 6; nextStep(419) -> 4; nextStep(420) -> 6; nextStep(421) -> 2; nextStep(422) -> 4; nextStep(423) -> 6; nextStep(424) -> 2; nextStep(425) -> 6; nextStep(426) -> 6; nextStep(427) -> 6; nextStep(428) -> 4; nextStep(429) -> 6; nextStep(430) -> 2; nextStep(431) -> 6; nextStep(432) -> 4; nextStep(433) -> 2; nextStep(434) -> 4; nextStep(435) -> 2; nextStep(436) -> 10; nextStep(437) -> 12; nextStep(438) -> 2; nextStep(439) -> 4; nextStep(440) -> 2; nextStep(441) -> 10; nextStep(442) -> 2; nextStep(443) -> 6; nextStep(444) -> 4; nextStep(445) -> 2; nextStep(446) -> 4; nextStep(447) -> 6; nextStep(448) -> 6; nextStep(449) -> 2; nextStep(450) -> 10; nextStep(451) -> 2; nextStep(452) -> 6; nextStep(453) -> 4; nextStep(454) -> 14; nextStep(455) -> 4; nextStep(456) -> 2; nextStep(457) -> 4; nextStep(458) -> 2; nextStep(459) -> 4; nextStep(460) -> 8; nextStep(461) -> 6; nextStep(462) -> 4; nextStep(463) -> 6; nextStep(464) -> 2; nextStep(465) -> 4; nextStep(466) -> 6; nextStep(467) -> 2; nextStep(468) -> 6; nextStep(469) -> 6; nextStep(470) -> 4; nextStep(471) -> 2; nextStep(472) -> 4; nextStep(473) -> 6; nextStep(474) -> 2; nextStep(475) -> 6; nextStep(476) -> 4; nextStep(477) -> 2; nextStep(478) -> 4; nextStep(479) -> 12.