22,209
社区成员
发帖
与我相关
我的任务
分享
-- Oracle 版的:(修改成 SQL Server 相当容易)
CREATE OR REPLACE FUNCTION isSushu_fun(v_num NUMBER)
RETURN VARCHAR2
IS
v_seq NUMBER(18,0); -- 求出输入数的算术平方根加1,用作循环条件
v_isSushu VARCHAR2(100);
BEGIN
v_seq := sqrt(v_num)+1;
v_isSushu := '是素数';
FOR i IN 2..v_seq LOOP -- 只能被1和他本身整除的数叫素数!
IF mod(v_num,i) = 0 THEN
v_isSushu := '不是素数';
exit;
END IF;
END LOOP;
return v_isSushu;
EXCEPTION
WHEN OTHERS
THEN
RETURN ('Error in running show_description');
END;
/
select isSushu_fun(9) from dual;
SET SERVEROUTPUT ON;
DECLARE
v_suShu VARCHAR2(40);
v_isnum NUMBER(18,0);
v_isNotnum NUMBER(18,0);
BEGIN
v_isnum := 0;
FOR i IN 1..10000 LOOP
v_suShu := isSushu_fun(i);
IF v_suShu = '是素数' THEN
v_isnum := v_isnum + 1;
DBMS_OUTPUT.PUT_LINE(i||' '||v_suShu);
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE('从1到10000 之间的素数共有:'||v_isnum);
END;
/
select a.number
from master..spt_values a
where a.number between 2 and 100 and a.type='p'
and not exists(select * from master..spt_values b
where b.number between 2 and 100 and b.type='p'
and a.number>b.number
and a.number%b.number=0)
for p in range(2,100):
for f in range(2,p):
if p % f == 0:
break
else: #这是for f in range(2,p)的else,不是if的else。
print(p)
declare @input int
set @input = 100 -- 求100以内的素数
select A.number from master..spt_values A
where type='p' and number between 2 and @input
and not exists(select 1 from master..spt_values B
where B.type='p'
and B.number between 2 and sqrt(A.number)
and A.number % B.number =0
)
order by A.number
SELECT p.n
FROM dbo.Nums p
WHERE p.n BETWEEN 2 AND 100
AND NOT EXISTS (
SELECT * FROM dbo.Nums f
WHERE f.n BETWEEN 2 AND p.n - 1
AND p.n % f.n = 0)
-- 100以内的素数(质数) 感觉算法很低级
declare @i int,@j int,@r int
set @i=2
while @i<100
begin
set @j=1
set @r=1
while @j<@i
begin
if @i%@j=0 and @i<>@j and @j<>1
begin
set @r=0
break
end
set @j=@j+1
end
if @r=1 print @i
set @i=@i+1
end
/*
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
*/