itgle.com

【题目】 统计正整数m和n之间(包括m和n)质数的个数,其中,1<m<n<1000。 【输入】 一行,包含两个整数m和n,以一个空格间隔。 【输出】 输出一行,包行一个整数,表示正整数m和n之间质数的个数。 【输入样例】 10 20 【输出样例】 4

题目

【题目】 统计正整数m和n之间(包括m和n)质数的个数,其中,1<m<n<1000。 【输入】 一行,包含两个整数m和n,以一个空格间隔。 【输出】 输出一行,包行一个整数,表示正整数m和n之间质数的个数。 【输入样例】 10 20 【输出样例】 4


相似考题
更多“【题目】 统计正整数m和n之间(包括m和n)质数的个数,其中,1<m<n<1000。 【输入】 一行,包含两个整数m和n,以一个空格间隔。 【输出】 输出一行,包行一个整数,表示正整数m和n之间质数的个数。 【输入样例】 10 20 【输出样例】 4”相关问题
  • 第1题:

    下列给定程序中,函数proc的功能是计算正整数m 各位上数字的平方和。

    例如,输入498,则输出应该是161。

    请修改程序中的错误,使它能得到正确结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

    试题程序:

    include<stdlib.h>

    include<stdio.h>

    include<conio.h>

    long proc(10ng m)

    {

    //****found****

    long sum=1;

    do

    {

    sum+=(m%10)*(m%10);

    m/=l0;

    //****found****

    }

    while(m)

    return(sum);

    }

    void main

    {

    long n;

    system("CLS");

    printf("Please enter a number:");

    scanf("%1d",&n);

    printf("\n%ld\n",proc(n));

    }


    正确答案:

    (1)错误:long sum=1;
    正确:long sum=0;
    (2)错误:while(m)
    正确:while(m);
    【解析】由函数proc可知,变量sum中存放正整数m 的各位上数字的平方和,其初始化为0。因此,“long sum= 1;”应改为“long sum=0;”。按照C语言的语法规则,语句都以分号结束,应在do-while语句最后加上分号。因此,“while(m)”应改为“while(m);”。

  • 第2题:

    下列给定程序中,函数fun()的功能是:给一维数组a输入任意4个整数,并按如下的规律输出。例如输入1,2,3,4,程序运行后输出以下方阵:

    4 1 2 3

    3 4 1 2

    2 3 4 1

    1 2 3 4

    请改正程序中的错误,使它能得出正确的结果。

    注意;不要改动main 函数,不得增行或删行,也不得更改程序的结构。

    试题程序;

    include <stdio.h>

    define M 4

    /*******************************/

    void fun(int a)

    {int i,j,k,m;

    printf("Enter 4 number: ");

    for (i=0; i<M; i++) scanf ("%d", &a [i] );

    printf ("\n\n The result : \n\n ");

    for (i=M; i>0; i--)

    { k=a [M-1];

    for (j=M-1; j>0; j--)

    /**********************************/

    a[j]=a[j+1];

    a[0]=k;

    for (m=0 ;m<M; m++ ) printf ("%d ", a [m]);

    printf ("\n ");

    }

    }

    main ()

    {int a [M];

    fun(a); printf("\n\n ");

    }


    正确答案:(1)错误:void fun (int a) 正确:int fim (int *a (2)错误:a[j]=a[j+1]; 正确:a[j]=a[j-1];
    (1)错误:void fun (int a) 正确:int fim (int *a (2)错误:a[j]=a[j+1]; 正确:a[j]=a[j-1]; 解析:其实,该题中题目信息已经告诉我们按“如下规律”,这就需要去认真分析矩阵的“规律”了,在第1列中,数列以4开始递减,直至1,在该数列中,行和列都是递减循环排列,所以题目在循环的时候有循环条件for(i=M;i>0;i--)和 for (j=M-1;j>0;j--),当然每次循环结束后在列中的赋值语句应该是a[j]=a[j-1];。

  • 第3题:

    运行以下程序后,如果从键盘上输入65 14<回车>,则输出结果为_____。main(){int m,n;printf("Enter

    运行以下程序后,如果从键盘上输入65 14<回车>,则输出结果为_____。 main() { int m,n; printf("Enter m,n:"); scanf("%d%d",&m,&n); while(m!=n) { while(m>n)m-=n; while(n>m)n-=m; } printf("m=%d\n",m); }

    A.m=3

    B.m=2

    C.m=1

    D.m=0


    正确答案:C
    解析:分析程序可知,该程序实现的功能是对数m,n求其最大公约数。在本题中m与n的值分别为65与14,其最大公约数为1,故其输出结果为m=1。

  • 第4题:

    下列程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx。请编写函数num(int m,int k,int xx[])实现程序的要求,最后调用函数read write DAT()把结果输出到out31.dat文件中。

    例如,若输入17,5,则应输出19,23,29,31,37。

    注意:部分源程序已给出。

    请勿改动主函数main()和输入输出函数read write DAT()的内容。

    试题程序:

    include < conio.h>

    include

    Void readwriteDAT();

    Void num(int m,int k,,int XX[])

    {

    }

    main()

    {

    int m,n,xx[1000];

    Clrscr();

    printf(“\nPlease enter tWO integers:”)

    ‘scanf(“%d,%d”,&m,&n);

    num(m, n, XX);

    for(m=0;m<n;m++)

    printf(“%d”, XX[m]);

    printf(”\n”);

    readwriteDAT();

    )

    VOid read write DAT()

    {

    int m,n,xx[1000],i;

    FILE *rf.,*Wf;

    rf=fopen(“in31.Dat”,r”);

    Wffopen(“ou1t31.Dat”/”w”);。 for(i=0;i<10;i++)

    {

    fscanf(rf,%d,” %d”,&m,&n);

    num(m,n,XX);

    for(m=0;m fprintf(wf,%d”,xx[m]);

    fprintf (wf, “\n”);

    }

    fclose(rf);

    fclose (wf);

    }


    正确答案:void num(int mint kint xxl)) { int data=m+l; /*从大于整数m的数开始找*/ int halfIn=0; while(1) { half=data/2; for(I=2;I<=half;I++) /*如果该数依次除以从2到一半的整数余数都不是0 则该数是素数*/ if(]if(data%I==O) break; /*如果余数为0则退循环取下一个数判断*/ if(I>half) { xx[n]=data;n++; /*判断该数为素数后将该数存入数组xx中并累计素数的个数*/ } if(n>=k) break; /*如果累计素数的个数超过了要求的个数则退出循环*/ data++; /*如果累计素数的个数小于要求的个数则继续取下一个数*/ } }
    void num(int m,int k,int xxl)) { int data=m+l; /*从大于整数m的数开始找*/ int half,I,n=0; while(1) { half=data/2; for(I=2;I<=half;I++) /*如果该数依次除以从2到一半的整数,余数都不是0, 则该数是素数*/ if(]if(data%I==O) break; /*如果余数为0,则退循环,取下一个数判断*/ if(I>half) { xx[n]=data;n++; /*判断该数为素数后,将该数存入数组xx中,并累计素数的个数*/ } if(n>=k) break; /*如果累计素数的个数超过了要求的个数,则退出循环*/ data++; /*如果累计素数的个数小于要求的个数,则继续取下一个数*/ } } 解析:本题考查的知识点如下:
    (1)循环结构与选择结构的嵌套使用。
    (2)强行退出循环结构。
    (3)特殊运算符"%"的使用。
    素数是除了1和它本身之外不能被其他数整除的数(1除外)。在本题中,首先要结合相关数学知识找出判定一个数是否为素数的方法,从而对数据进行筛选。如果数据a依次除以从2到a/2的整数,余数都不是 0,则该数是素数。因为所给的数据是连续的数,而且最终所求的数据的个数一定,所以这里可以使用循环结构对数据依次筛选。同时嵌套选择结构对筛选的数据进行不同的处理。在a依次除以从2到a/2的整数的过程中,只要有一次余数为0,则可退出这一层循环,即退出整除取余的循环,进入下一个数的判断中。

  • 第5题:

    以下程序的功能是:将输入的正整数按逆序输出。例如:若输入135则输出531。请填空。

    include <stdio.h>

    main()

    { int n, s;

    printf("Enter a number:"); scanf("%d",&n);

    printf("Output: ");

    do

    { s=n%10; printf("%d",s); [ ]; }

    while (n!=0);

    printf("\n');

    }


    正确答案:n/=10或n=n/10或n=(n-s)/10或n=(n-n%10)/10
    n/=10或n=n/10或n=(n-s)/10或n=(n-n%10)/10 解析:根据s=n%10可知:此操作可以将输入的数据n的最后—位赋给s,根据题目的要求是要将输入的数据逆序输出,现在已经将原数据的个位输出,在其后如果执行n/=10司将原数据的个位数去掉,满足do....while的条件继续s=n%10操作,此时可求出十位上的数进行输出,继续执行n/=10操作,与上相同最后将百位上的数进行输出,所以该题答案为: n/=10。

  • 第6题:

    阅读以下说明和流程图,回答问题1-2,将解答填入对应的解答栏内。

    [说明]

    下面的流程图采用欧几里得算法,实现了计算两正整数最大公约数的功能。给定正整数m和 n,假定m大于等于n,算法的主要步骤为:

    (1)以n除m并令r为所得的余数;

    (2)若r等于0,算法结束;n即为所求;

    (3)将n和r分别赋给m和n,返回步骤(1)。

    [流程图]

    [问题1] 将流程图中的(1)~(4)处补充完整。

    [问题2] 若输入的m和n分别为27和21,则A中循环体被执行的次数是(5)。


    正确答案:[问题1] (1) n>m或nm或其它等效形式 (2) m←t (3) n←r (4) m%n [问题2] (5) 1
    [问题1] (1) n>m或nm或其它等效形式 (2) m←t (3) n←r (4) m%n [问题2] (5) 1 解析:(1)~(2)当n的值大于(等于)m时,应交换两者的值,再使用欧几里得算法;
    (3)~(4)略;
    (5)m,n和r在执行循环A前后的值分别为:

  • 第7题:

    请补充函数fun(),该函数的功能是:寻找两个整数之间的的所有素数(包括这两个整数),把结果保存在数组bb中,函数返回素数的个数。

    例如,输入6和21,则输出为:7 11 13 17 19 21。

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

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

    试题程序:

    include<conio. h>

    include<stdio. h>

    define N 1000

    int fun (int n, int m, int bb [N])

    {

    int i, j, k=0, flag;

    for (j=n; j<=m; j++)

    {

    【 】;

    for (i=2; i<j; i++)

    if(【 】)

    {

    flag=0;

    break;

    }

    if(【 】)

    bb [k++] =j

    }

    return k;

    }

    main ()

    {

    int n=0,m=0, i, k;

    int bb[N];

    clrscr ();

    printf ("Input n\n");

    scanf ("%d", &n);

    printf ("Input m\n");

    scanf ("%d", &m);

    for (i=0; i<m-n; i++)

    bb[i]=0;

    k=fun (n, m, bb);

    for (i=0; i<k; i++)

    printf ("%4d",bb [i]);

    }


    正确答案:I p->next=s p->next
    I p->next=s p->next 解析:第一空:题目要求各结点的值为对应的下标,头结点的值为0,其他结点的值从1开始,所以此空应填i。第三空:为了将结点p和结点s连接起来,应将结点p的next 指针指向结点s。第三空:为了通过for 循环形成链表,每执行完一次循环操作,都要将指针p 指向下一个结点。

  • 第8题:

    窗体上有一个名称为Command1的命令按钮,并有如下程序: Private Sub Command1Click( ) Dim m As Integer,n As Integer m=InputBox("输入第一个数") nzInputBox("输入第二个数") Do While m<>n Do While m>n m= m-n Loop Do While n>m n=n-m Loop Loop Print m End Sub 该程序的功能是( )。

    A.求数值m和n的最大公约数

    B.求数值m和n的最小公倍数

    C.求数值m和n中的较大数

    D.求数值m和n中的较小数


    正确答案:A
    A。【解析】此题的算法为经典的辗转相减法求最大公约数算法,也可用特殊值法求解。

  • 第9题:

    设M和N为正整数,且 M>2 ,N>2,MN<2(M+N),满足上述条件的例(M,N)共有( )对。

    A.3
    B.5
    C.6
    D.7

    答案:B
    解析:

  • 第10题:

    设{an}为数列,对于“存在正数肘,对任意正整数n,有
    的否定(即数列{an}无界)是( )。

    A、存在正数M,存在正整数n,使得|an|>M
    B、对任意正数M,存在正整数n,使得|an|>M
    C、存在正数M,对任意正整数n,有|an|>M
    D、对任意正数M以及任意正整数n,有|an|>M

    答案:B
    解析:
    对任意正数M,存在正整数n,使得

    则称数列{an}无界.

  • 第11题:

    算法可以有0~n(设n、m为正整数)个输入,有()个输出。

    • A、0~m
    • B、0
    • C、1~m
    • D、1

    正确答案:C

  • 第12题:

    问答题
    通过键盘输入一个高精度的正整数n(n的有效位数≤240),去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数字组成的新数最小。 【样例输入】 178543 S=4 【样例输出】 13

    正确答案: 为了尽可能地逼近目标,我们选取的贪心策略为:每一步总是选择一个使剩下的数最小的数字删去,即按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字,否则删除第一个递减区间的首字符。然后回到串首,按上述规则再删除下一个数字。重复以上过程s次,剩下的数字串便是问题的解了。
    具体算法如下:
    输入s,n;
    while(s>0)
    {i=1; //从串首开始找
    while(i
    {i++;}
    delete(n,i,1); //删除字符串n的第i个字符
    s--;
    }
    while(length(n)>1)&&(n[1]=‘0’)
    delete(n,1,1); //删去串首可能产生的无用零
    输出n;
    解析: 暂无解析

  • 第13题:

    T(n)=O(f(n))中,函数O()的正确含义为

    A.T(n)为f(n)的函数

    B.T(n)为n的函数

    C.存在足够大的正整数M,使得T(n)≤M×f(n)

    D.存在足够大的正整数M,使得M×f(n)≤T(n)


    正确答案:C

  • 第14题:

    运行以下程序后,如果从键盘上输入6514<回车>,则输出结果为______。 main() { int m,n; printf("En

    运行以下程序后,如果从键盘上输入6514<回车>,则输出结果为______。 main() { int m,n; printf("Enter m,n:"); scanf("%d%d",&m,&n); while(m!=n) { while(m>n)m-=n; while(n>m)n-=m; } printf("m=%d\n",m); }

    A.m=3

    B.m=2

    C.m=1

    D.m=0


    正确答案:C

  • 第15题:

    阅读下面的程序: Private Sub Form_Click() Dim m,n As Integer m=InputBox("请输入M的值") m=Val(m) m1=m n=InputBox("请输入N的值") n=Val(n) n1=n Do While n<>0 remin=m Mod n m=n n=remin Loop Print m1,n1,m End Sub 程序运行后,单击窗体,在对话框中分别输入16和24,则程序在窗体上的输出结果为

    A.16 24 4

    B.16 24 8

    C.24 16 6

    D.24 16 8


    正确答案:B
    解析:本题捉供的是用“辗转相除法”求两个整数最大公约数的程序。一般来说,假定有两个整数m和n(m>n),将m作为被除数,n作为除数,相除后余数为r。如果r不等于0,则令m=n,n=r,再进行一次除法运算(以新的m作为被除数,n作为除数),得到新的r。如果r仍不等于0,则重复上述过程,直到r=0为止,此时的n就是两个数的最大公约数。在本题的DoWhile-Loop循环中,通过辗转相除求最大公约数,循环结束的条件是相除后余数为0,如果不为0,则一直“除”下去。这里用Mod运算符求余数,较大的整数作为被除数或者较小的整数作为被除数都可以得到正确结果,但整除的次数可能会不一样。在本题的输入中,先输入16,再输入24,求出的最大公约数仍为8。

  • 第16题:

    下面程序的功能是从键盘输入—个大于100的整数m,计算并输出满足不等式

    1+22+32+42+…+n2<m

    的最大的n。请填空。

    Private Sub Command1_Click()

    Dim s,m,n As Integer

    m=Val(InputBox("请输入一个大于100的整数"))

    n=【 】

    s=0

    Do While s<m

    n=n+1

    s=s+n*n

    Loop

    Print "满足不等式的最大n是";【 】

    End Sub


    正确答案:0 n-1
    0 , n-1 解析:Do While…Loop是先判断条件表达式的值是否为True,如果为True,则执行循环体,如果为False,则执行Loop后面的语句。由循环体可知该题的第1空应该填0。当循环条件不满足时跳出循环,此时的n是满足不等式1+22+32+42+…+n2>=m的最小的n,所以该题的第2空应该填n-1。

  • 第17题:

    设M和N为正整数,且M>2,N>2,MN<2(M+N),满足上述条件的例(M,N)共有()对。A.3B.5C.6D.7

    设M和N为正整数,且M>2,N>2,MN<2(M+N),满足上述条件的例(M,N)共有()对。

    A.3

    B.5

    C.6

    D.7


    正确答案:B

  • 第18题:

    阅读下列程序说明和C程序,将应填入(n)处的字句写在对应栏内。

    [函数2.1说明]

    下面程序的功能是计算x和y的最小公倍数。

    [函数2.1]

    main()

    { int m,n,d,r;

    seanf("%d %d",&m,&n);

    if(m<n) {r=m;m=n;n=r;}

    (1);

    while (d%n! =0) (2);

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

    }

    [函数2.2说明]

    下述程序接收键盘输入,直到句点“.”时结束。输入的字符被原样输出,但连续的空格输入将转换成一个空格。

    [函数2.2]

    include <stdio.h>

    main()

    { char c,preChar='\0';

    c = getchar();

    while(c! = '.'){

    if((3)) putchar(c);

    else if(preChar! =' ') putchar(c);

    (4);

    c=(5);

    }

    }


    正确答案:(1)d=m (2) d+=m或d=d+m (3) c!=‘’ (4) preChar=c (5) getchar()
    (1)d=m (2) d+=m或d=d+m (3) c!=‘’ (4) preChar=c (5) getchar() 解析:(1)下文使用了变量d,因此需在此初始化,由下面循环的条件“d%n!=0”知初值不能是n,因此必为m;
    (2)此处while循环生成最小公倍数d,其终止条件是n整除d,因此循环过程中需要保证m整除d并且d尽可能地小,于是d应以m为增量递增;
    (3)当输入的字符非空格时,原样输出;
    (4)程序中变量preChar用于记录上一次读入的字符,循环过程中应不断更新其值;
    (5)接收下一个输入。

  • 第19题:

    请补充main函数,该函数的功能是:输入两个正整数m和n,求这两个数的最大公约和最小公倍数。

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

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

    试题程序:

    include <stdio.h>

    main ( )

    {

    int a, b, n, m, t;

    clrscr ();

    printf ("\nInput two numbers: \n");

    scanf ("%d, %d", &n, &m);

    if (n<m)

    {

    a=m;

    b=n;

    }

    else

    {

    a=n;

    b=m;

    }

    while(【 】)

    {

    t=【 】

    a=b;

    b=t;

    }

    printf ("greatest con. non divisor:

    %d\n", a);

    printf ("least common multiple:

    %d\n",【 】);

    }


    正确答案:b!=0 a%b; n*m/a
    b!=0 a%b; n*m/a 解析:第一空:本题考查求最大公约数和最小公倍数的方法。变量a保存两数中较大着,变量b保存较小者,采用循环的方法求解最大公约数,循环结束条件是b等于0。第二空:求解最大公约数的思路是,将a对b求余,如果余数为0, 则b即为两数的最大公约数,如果余数不为0,则将b赋给a,余数赋给b,继续将a对b求余,如此循环,直到余数为0。第三空:最小公倍数等于两数的乘积除以最大公倍数。

  • 第20题:

    (7)在窗体上画1个名称为Command 1的命令按钮,然后编写如下程序:

    Private Sub Command 1 Click()

    Dim m As Integer, x As Integer

    Dim flag As Boolean

    flag=False

    n=Val(InputBox("请输入任意1个正整数"))

    Do While Not flag

    a=2

    flag=【7】

    Do While flag And a <= Int(Sqr(n))

    If n/a=n\a Then

    flag=False

    Else

    【8】

    End If

    Loop

    If Not flag Then n=n+l

    Loop

    Print【9】

    End Sub

    上述程序的功能是,当在键盘输入任意的1个正整数时,将输出不小于该整数的最小素数。请填空完善程序。


    正确答案:
    (7)True
    (8)a=a+1
    (9)n

  • 第21题:

    给定两个正整数m=630和n=675.利用辗转相除算法,求它们的最小公倍数。


    答案:
    解析:
    两个整数的最小公倍数=两整数的乘积÷最大公约数
    求最大公约数的辗转相除法算法:
    有两整数m和n:
    ①n%m得余数c;
    ②若c=0,则m即为两数的最大公约数;
    ③若c≠0,则n=m,m=c,再回去执行①。
    求630和675的最大公约数过程为:
    ①675÷630.余45:
    ②630÷45余0,因此,45即为最大公约数。
    最小公倍数=两整数的乘积÷最大公约数
    即:最小公倍数=630×675÷45=9450。

  • 第22题:

    通过键盘输入一个高精度的正整数n(n的有效位数≤240),去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数字组成的新数最小。 【样例输入】 178543 S=4 【样例输出】 13


    正确答案: 为了尽可能地逼近目标,我们选取的贪心策略为:每一步总是选择一个使剩下的数最小的数字删去,即按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字,否则删除第一个递减区间的首字符。然后回到串首,按上述规则再删除下一个数字。重复以上过程s次,剩下的数字串便是问题的解了。
    具体算法如下:
    输入s,n;
    while(s>0)
    {i=1; //从串首开始找
    while(i
    {i++;}
    delete(n,i,1); //删除字符串n的第i个字符
    s--;
    }
    while(length(n)>1)&&(n[1]=‘0’)
    delete(n,1,1); //删去串首可能产生的无用零
    输出n;

  • 第23题:

    单选题
    将一个正整数n表示成一系列正整数之和,n=n1+n2+…+nk(其中,n1≥n2≥…≥nk≥1,k≥1)正整数n的一个这种表示称为正整数n的一个划分。正整数n的不同的划分个数总和称为正整数n的划分数,记作p(n);另外,在正整数n的所有不同划分中,将最大加数n1不大于m的划分个数记作q(n,m)。则当n=10时,p(n)=()。
    A

    q(8,8)

    B

    1+q(9,9)

    C

    2+q(10,8)

    D

    ABC都正确


    正确答案: A
    解析: 暂无解析

  • 第24题:

    单选题
    算法可以有0~n(设n、m为正整数)个输入,有()个输出。
    A

    0~m

    B

    0

    C

    1~m

    D

    1


    正确答案: A
    解析: 暂无解析