DECLARE @N INT,@M INT,@K INTSET @N=14
SET @K=2WHILE @K<=(@N-1)
BEGIN
SET @M=@N%@K
IF @M=0 
SELECT 质数=NULL,不是质数='√'
BREAK
IF @M!=0
SET @K=@K+1
END
SELECT 质数='√',不是质数=NULL
这是我写的,但是有问题,因为如果不是质数的时候,比如说@N=20的时候,他不仅会输出第一个SELECT,最后一个也会输出,是质数的话就不会出现问题。哪位大虾能够帮我解决一下。谢谢

解决方案 »

  1.   

    DECLARE @N INT,@M INT,@K INTSET @N=14
    SET @K=2WHILE @K<=(@N-1)
       BEGIN
         SET @M=@N%@K
         IF @M=0
           BEGIN 
             SELECT 质数=NULL,不是质数='√'
             BREAK
           END
         ELSE
             SET @K=@K+1
       END
    if @M!=0
       SELECT 质数='√',不是质数=NULL
    这样写就没问题了
      

  2.   

    DECLARE @N INT,@M INT,@K INTSET @N=3
    SET @K=2WHILE @K<=(@N-1)
       BEGIN
         SET @M=@N%@K
         IF @M=0
             BREAK
         ELSE
             SET @K=@K+1
       END
    IF @M=0
       SELECT 质数=NULL,不是质数='√'
    Else
       SELECT 质数='√',不是质数=NULL
    这样也可以
      

  3.   

    CREATE function t(@a int)
    returns int
    as
    begin
    declare @r int
    declare @i int
    if @a > 2
    begin
    if @a % 2 =0
    set @r = 0
    else
    begin
    set @i = 3
    while @i < sqrt(@a) and @a % @i <>0
    begin
    set @i = @i + 2
    end
    if @i > sqrt(@a) set @r = 1 else set @r = 0
    end
    end
    else
    set @r = 1
    return @r
    end
      

  4.   

    IF @M!=0
    SET @K=@K+1
    END
    SELECT 质数='√',不是质数=NULL
    这个写法有问题,仔细看看。。
      

  5.   

    嗯,谢谢各位大虾的帮助,不过昨天晚上我睡觉的时候,想到了
    和小狼的差不多,
    DECLARE @N INT,@M INT,@K INTSET @N=8
    SET @K=2WHILE @K<=(@N-1)
    BEGIN
    SET @M=@N%@K
    IF @M=0 
    BREAK
    SET @K=@K+1
    ENDIF @K>=(@N-1)
    SELECT 质数='√',不是质数=NULL
    ELSE
    SELECT 质数=NULL,不是质数='√'
      

  6.   

    DECLARE @N INT,@M INT,@K INTSET @N=99
    SET @K=2WHILE @K<=(@N-1)
    BEGIN
    SET @M=@N%@K
    IF @M=0 
    BEGIN
    SELECT 质数=NULL,不是质数='√'
    BREAK
    END
    ELSE IF @K=@N-1
    BEGIN
    SELECT 质数='√',不是质数=NULL
    END
    SET @K=@K+1
    END