素数
【问题】任给一个自然数n,求出这个自然数不同因数的个数。
例如 n=6时,因为1,2,3,6这四个数均是6的因数,故输出为total=4。
【算法】类似判断素数的方法。
如果发现n有一个≤sqr(n)的因数,必然同时有一个≥sqr(n)的因数。
例如:6有一个因数2,则必有另一因数3。因为2*3=6
【参考程序】
var n,nums,k,i:longint;
begin
repeat
writeln('input n:');
readln(n);
if n<=0 then writeln('N>0!!');
until
n>0;
k:=trunc(sqrt(n));
nums:=2;
for
i:=2 to k do
if n
mod i=0 then nums:=nums+2;
if
n=sqr(k) then dec(nums);
writeln('nums:',nums);
end.
万年历
【题目】输入年、月、日,求这一天是星期几。
【参考程序1】
【算法提要】求出这一天离公元1年的元旦有多少天days,然后对7求余
const
first=1; {公元1年为基准}
first_week=1;
{公元1年的元旦为星期一}
yue:array[1..12] of
1..31=(31,28,31,30,31,30,31,31,30,31,30,31);
week_:array[0..6] of string[20] =('Sunday','Monday','Tuesday','Wedsday',
'Thursday','Friday','Saturday');
var
days,week,year,month,date,i,years:longint;
begin
writeln('year:');readln(year);
writeln('month');readln(month);
writeln('date');readln(date);
years:=0; days:=0;
for i:=first to year-1 do
if
(i mod 400=0) or (i mod 4=0) and (i mod 100<>0) then
begin years:=years+1;end; {注意处理闰年的情况}
days:=(year-first)*365+years;
{离基准年过了多少天}
for i:=1 to month-1 do days:=days+yue[i]; {本年过了多少个月}
for i:=1 to date do days:=days+1; {本月过了多少天}
if ((year mod 400=0) or (year mod 4=0) and (year
mod 100<>0))
and
(month>3) then days:=days+1;
{如果本年为闰年,且月份超2月,
还要考虑加1}
week:=((days-1) mod 7 +first_week ) mod 7; {求星期数}
writeln('it is ',week_[week]);
readln;
end.
【参考程序2】
用公式法: days:=trunc((year-1)*(1+1/4-1/100+1/400)+c)
用求出的days对7求余数。其中c为该天离该年元旦的天数
const
first=1;
first_week=1;
yue:array[1..12] of
1..31=(31,28,31,30,31,30,31,31,30,31,30,31);
week_:array[0..6] of string[20] =('Sunday','Monday','Tuesday','Wedsday',
'Thursday','Friday','Saturday');
var
days,week,year,month,date,i:longint;
begin
writeln('year:');readln(year);
writeln('month');readln(month);
writeln('date');readln(date);
days:=0;
for i:=1 to month-1 do days:=days+yue[i];
for i:=1 to date do days:=days+1;
if ((year mod 400=0) or (year mod 4=0) and (year
mod 100<>0))
and
(month>3) then days:=days+1;
days:=trunc((year-1)*(1+1/4-1/100+1/400)+days);
week:=days mod 7;
writeln('it is ',week_[week]);
readln;
end.