参考答案和解析
课上已讲
更多“2、判断一个数是否为素数”相关问题
  • 第1题:

    请编一个函数int fun(int a),它的功能是:判断a是否是素数,若a是素数,返回1;若不是素数,返回0。A的值由主函数从键盘读入。


    正确答案:
    #include”stdio.h”
    int fun(int a)
    {int I;
    if(a==2) return 1; I=2;
    while((a%I)!=0I<=sqrt((float)a))
    I++;
    if(a%I==0)
    {printf(“%d is not a prime!”,a);
    return 0; }
    printf(“%d is a prime!”,a);
    return 1; }
    main
    {int x;
    printf(“\n please enter a number:”);
    scanf(“%d”,&x);
    printf(“%d\n”,fun(x)); }

  • 第2题:

    以下ispeime函数的功能是判断形参a是否为素数,是素数,函数返回1,否则返回0。请填空。int isprime(int a){int i; for(i=2;i<=a/2;【】) if(a%i= =0) return(0); 【】;}


    正确答案:i++  或 i+=1  或 ++i 或 i=i+1
            return 1  或  return(1)
    当进行一个判断之后要让i增1,以实现对下一个数的除法。依据题意,如果是素数,要返回1.

  • 第3题:

    下列程序的功能是输入一个整数,判断是否是素数,若为素数输出1,否则输出0,请填空。

    main()

    {int i, x, y=1;

    scanf("%d", &x);

    for(i=2; i<=x/2; i++)

    if【14】{ y=0; break;}

    printf("%d\n", y);

    }


    正确答案:
    (x%i==0)

  • 第4题:

    B.判断longint范围内的数是否为素数(包含求50000以内的素数表):

    procedure getprime;

    var

    i,j:longint;

    p:array[1..50000] of boolean;


    正确答案:

     

    begin
    fillchar(p,sizeof(p),true);
    p[1]:=false;
    i:=2;
    while i<50000 do begin
    if p[i] then begin
    j:=i*2;
    while j<50000 do begin
    p[j]:=false;
    inc(j,i);
    end;
    end;
    inc(i);
    end;
    l:=0;
    for i:=1 to 50000 do
    if p[i] then begin
    inc(l);pr[l]:=i;
    end;
    end;{getprime}

    function prime(x:longint):integer;
    var i:integer;
    begin
    prime:=false;
    for i:=1 to l do
    if pr[i]>=x then break
    else if x mod pr[i]=0 then exit;
    prime:=true;
    end;{prime}

  • 第5题:

    请补充函数proc(),该函数的功能是判断一个数是否为素数。该数是素数时,函数返回字符串:“yes!”,否则函数返回字符串:“no!”,并在主函数中输出。

    注意:部分源程序给出如下。

    请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填入所编写的若干表达式或语句。

    试题程序:


    正确答案:

    【l】char*proc(intn)【2】2【3】n%i==0
    【解析】由整个程序可知,【1】应为函数proc()的函数头。根据主函数中的调用可知形参的个数和类型,因此,【1】处填“char”proc(intn)”。素数为只能被1和它本身整除的整数。要判断一个整数是否为素数,要看它是否能被除1和小于它本身之外的数整除,因此,【2】处填“2”;【3】处填“n%i==0”。

  • 第6题:

    利用穷举法编写一个算法判断给定的正整数n是否是素数的程序,即判断n是否只能被1和自身整除。


    正确答案: main( )
    {
    int m,i,k;
    scanf("%d",&m);
    k=sqrt(m);
    for(i=2;i<=k;i++)
    if(m%i==0) break;
    if(i>=k+1)
    printf("%d is a prime number/n",m);
    else
    printf("%d is not a prime number/n",m);
    }

  • 第7题:

    编一个程序,输入一个正整数,判断它是否为素数。如不是,则输出其所有正约数。


    正确答案: Console.WriteLine("请输入一个正整数:");
    uinti,n,flag;
    boolf=true;
    n=uint.Parse(Console.ReadLine());
    //uint.TryParse(Console.ReadLine(),outn);
    for(i=2;i{
    if(n%i==0){f=false;break;}
    }
    if(f)Console.WriteLine("{0}是一个素数。",n);
    else
    {
    Console.Write("{0}不是一个素数。/n{1}=",n,n);
    i=2;
    flag=0;
    while(i<=n)
    {
    while(n%i==0)
    {
    n=n/i;
    if(flag!=0)Console.Write(’*’);
    flag=1;
    Console.Write("{0}",i);
    }
    i++;
    }
    }

  • 第8题:

    考生文件夹下有一个数据库“学校管理”,其中有数据库表“student”、“score”和“course”

    (1)在考生文件夹下有程序文件“cxl.prg”,该程序的功能是检索分数小于60的学生的全部信息。请修改程序中的错误,并调试该程序,使之正确运行。考生不得增加或删减代码。

    (2)编写程序“cx2.prg”,实现“输入一个数判断其是否为素数”的功能。


    正确答案:
    【考点指引】本大题第1小题主要考查改正在使用SQL过程时容易产生的错误;第2小题主要是简单编程,这里要用到数学函数、取整函数和循环语句。
    (1)【操作步骤】
    ①在命令窗口中输入命令:MODI COMM cx1(回车执行),打开程序文件编辑窗口,在程序文件编辑窗口中将原程序:SELECT*FROM student WHERE学号=(SELECT学号FROM score WHERE成绩<60)中的“=”改成“IN”,关闭程序文件编辑窗口并保存程序文件。
    ②在命令窗口中输入命令:DO cx1(回车执行),执行程序文件。
    (2)【操作步骤】
    ①在命令窗H中输入命令:MODI COMM cx2(回车执行),打开程序文件编辑窗口,在程序文件编辑窗口中输入以下程序代码:
    INPUT〝请输入一个>2的整数:〞TO aa
    bb=.T.
    FoR i=2 TO INT(SQRT(aa))
    IF aa/i=INT(aa/i)THEN
    ?STR(aa)+〝不是素数!〞
    bb=.F.
    EXIT
    ENDIF
    NEXT
    IF bb THEN
    ?STR(aa)+〝是素数!〞
    ENDIF
    关闭程序文件编辑窗口并保存程序文件。
    ②在命令窗口中输入命令:DO cx2(回车执行),执行程序文件。

  • 第9题:

    ( 9 )某人编写如下函数来判断 a 是否为素数,若是,则函数返回 True ;否则返回 False

    Function Prime ( a As Integer ) AS Boolean

    Dim k As Interger,isprime AS Boolean

    If a<2 Then

    isprime=False

    Else

    isprime=True

    k=2

    Do While k<a/2 And isprime

    If a Mod k=0 Then

    isprime=False

    ELSE

    k=k+1

    End IF

    LOOP

    End If

    prime=isprime

    End Function

    在测试时发现有 1 个非素数也被判断为素数,这个错判的数是——


    正确答案:

  • 第10题:

    素数的求法

    A.小范围内判断一个数是否为质数:

    function prime (n: integer): Boolean;

    var I: integer;


    正确答案:

     

    begin
    for I:=2 to trunc(sqrt(n)) do
    if n mod I=0 then begin
    prime:=false; exit;
    end;
    prime:=true;
    end;

  • 第11题:

    编写程序,判断一个大于等于3的自然数是否为素数。


    正确答案:程序代码如下: CLEAR INPUT“请输入自然数(>=3):” TO n f=0 i=2 DO WHILE i=INT(SQRT(n)) IF MOD(ni)>0 i=i+1 LOOP ELSE f=1 EXIT ENDIF ENDDO IF f=0 ? STR(n3)+“是素数” ELSE ? STR(n3)+“不是素数” ENDIF RETURN
    程序代码如下: CLEAR INPUT“请输入自然数(>=3):” TO n f=0 i=2 DO WHILE i=INT(SQRT(n)) IF MOD(n,i)>0 i=i+1 LOOP ELSE f=1 EXIT ENDIF ENDDO IF f=0 ? STR(n,3)+“是素数” ELSE ? STR(n,3)+“不是素数” ENDIF RETURN

  • 第12题:

    素数是指只含有两个因子的自然数(即只能被自身和1整除)。孪生素数,是指两个相差为2的素数。比如,3和5,17和19等。所谓的孪生素数猜想,是由希腊数学家欧几里得提出的,意思是存在着无穷对孪生素数。该论题一直末得到证明。近期,美国一位华人讲师的最新研究表明,虽然还无法证明存在无穷多个之差为2的素数对,但存在无穷多个之差小于7000万的素数对。有关方面认为,如果这个结果成立,那么将是数论发展的一项重大突破。
    以下哪项如果为真,最能支持有关方面的观点?()

    A.这位华人讲师长期从事数学领域的相关教学和科研工作
    B.关于孪生素数猜想的证明需要一个漫长的、逐步推进的过程
    C.这是第一次有人正式证明存在无穷多组间距小于定值的素数对
    D. 7000万这个数字很大,离孪生素数猜想给出的2还有很大距离

    答案:C
    解析:
    题干给出的论点为“华人讲师的证明结果成立是数论发展的一项重大突破”。论据是“.......直未得到证明”。那么第一个可以证明这一结论的结果肯定是重大突破。故C项说这是第一次有人证明,说明素数对是存在的,所以加强了论据。

  • 第13题:

    利用穷举法编写一个算法判断给定的正整数n是否是素数,即判断n是否只能被1和自身整除。


    正确答案: #include“math.h”
    #include“stdio.h”
    void main()
    {
    int m,i,k;
    scanf("%d",&m);
    ksqrt(m);
    for(i=2;i<=k;i++)
    if(m%i==0)break;
    if(i>=k+1)
    printf("%d is a prime number/n",m);
    else
    printf("%d is not a prime number/n",m);
    }

  • 第14题:

    问答题
    编一个程序,输入一个正整数,判断它是否为素数。如不是,则输出其所有正约数。

    正确答案: Console.WriteLine("请输入一个正整数:");
    uinti,n,flag;
    boolf=true;
    n=uint.Parse(Console.ReadLine());
    //uint.TryParse(Console.ReadLine(),outn);
    for(i=2;i{
    if(n%i==0){f=false;break;}
    }
    if(f)Console.WriteLine("{0}是一个素数。",n);
    else
    {
    Console.Write("{0}不是一个素数。/n{1}=",n,n);
    i=2;
    flag=0;
    while(i<=n)
    {
    while(n%i==0)
    {
    n=n/i;
    if(flag!=0)Console.Write(’*’);
    flag=1;
    Console.Write("{0}",i);
    }
    i++;
    }
    }
    解析: 暂无解析