niusouti.com

回文素数是指一个数同时为素数和回文数。例:131、191 编写程序,要求输入回文素数的起止范围,将范围内的回文素数显示出来,每行显示5个数,注意每列要准确对齐。 运行事例如下: 请输入回文素数的起止范围: 5 500 5-500范围内的回文素数如下: 5 7 11 101 131 151 181 191 313 353 373 383

题目

回文素数是指一个数同时为素数和回文数。例:131、191 编写程序,要求输入回文素数的起止范围,将范围内的回文素数显示出来,每行显示5个数,注意每列要准确对齐。 运行事例如下: 请输入回文素数的起止范围: 5 500 5-500范围内的回文素数如下: 5 7 11 101 131 151 181 191 313 353 373 383


相似考题
更多“回文素数是指一个数同时为素数和回文数。例:131、191 编写程序,要求输入回文素数的起止范围,将范围内的回文素数显示出来,每行显示5个数,注意每列要准确对齐。 运行事例如下: 请输入回文素数的起止范围: 5 500 5-500范围内的回文素数如下: 5 7 11 101 131 151 181 191 313 353 373 383”相关问题
  • 第1题:

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

    【说明】

    下面C程序代码的功能是:对于输入的一个正整数n(100≤n<1000),先判断其是否是回文数(正读反读都一样的数)。若不是,则将n与其反序数相加,再判断得到的和数是否为回文数,若还不是,再将该和数与其反序数相加并进行判断,依此类推,直到得到一个回文数为止。例如,278不是回文数,其反序数为872,相加后得到的1150还不是回文数,再将1150与其反序数511相加,得到的1661是回文数。

    函数int isPalm(long m)的功能是:将正整数m的各位数字取出存入数组中,然后判断其是否为回文数。若m是回文数则返回1,否则返回0。

    【C程序代码】

    include <stdio.h>

    include <stdlib.h>

    int isPalm(long m)

    { /*判断m是否为回文数*/

    int i = 0, k = 0;

    char str[32];

    while (m > 0) { /*从个位数开始逐个取出m的各位数字并存入字符数组str*/

    str[k++] =(1)+ '0';

    m = m / 10;

    }

    for(i = 0; i < k/2; i++) /*判断str中的k个数字字符序列是否是回文*/

    if ( str[i] != str[(2)] ) return 0;

    return 1;

    }

    int main ( )

    {

    long n, a, t;

    printf("input a positive integer:"); scanf("%ld",&n);

    if (n < 100 || n > =1000) return -1 ;

    while((3)) { /*n不是回文数时执行循环*/

    printf("%ld-> ", n);

    for(a = 0, t = n; t > 0; ) { /*计算n的反序数并存入a*/

    a =(4)*10 + t % 10; t = t / 10;

    } /*end of for*/

    n =(5); /*与反序数求和*/

    } /*end of while*/

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

    system("pause"); return 0;

    }


    正确答案:(1) m%10或其等价表示 (2) k-1-i (3) !isPalm(n)或isPalm(n)!=1或isPalm(n)= =0 (4) a (5) n+a
    (1) m%10,或其等价表示 (2) k-1-i (3) !isPalm(n),或isPalm(n)!=1,或isPalm(n)= =0 (4) a (5) n+a 解析:本题考查C程序设计的基本能力。
    函数isPalm(long m)的功能是判断m是否为回文数,其方法是先将m的各位数字依次取出转换为对应的数字字符保存在数组str中,然后再判断str中的字符序列是否对称。代码如下:
    while(m>0){/*从个位数开始逐个取出m的各位数字并存入字符数组str*/
    str[k++] = m %10 +'0';
    m=m/10;
    }
    因此,空(1)处应填入“m%10",将数m的个位数字取出。以上while循环结束时,k的值即为m取初始值时的位数。
    若需判断str[0]、str[1]、…、str[k-1]中的k个数字字符序列是否对称,则应依次比较str[0]与str[k-1]、str[1]与str[k-2]、…str[k/2-1]与str[k2+1]是否相等,若都相等,则是回文数;若其中有一处不等,则不是回文数。代码如下:
    for(i=0;ik/2;i++)
    if ( str[i] !=str[(2)] )return 0;
    因此,空(2)处应填入“k-1-i”。
    根据题目描述,从最初输入的数开始,直到得到一个回文数时结束,因此对于数n,调用函数is Palm(n),根据返回值确定n是否为一个回文数,空(3)处应填入“!isPalm(n)”。
    为了求一个数t的反序数,可从其个位数字开始,依次取出其各位数字并进行组合。下面以t=345举例说明通过整除取余“%”、整除“/”取出各位数字并组合出543的过程。
    初始时:a=0t=345
    下一步:345%10=>5a*10+5=>a=5t/10=345/10=>t=34
    下一步:34%10=>4a*10+4=>a=54t/10=34/10=>t=3
    下一步:3%10=>3a*10+3=>a=543t/10=3/10=>t=0
    因此,可知空(4)处应填入“a”。
    最后数n与其反序数a相加得到新的数,继续产生回文数的过程。空(5)处应填入“n+a”。

  • 第2题:

    下列程序的功能是:输出10到100之间的所有回文素数。所谓回文素数是指,如果一个数是素数,则该数反序后形成的数也是素数。例如,13是素数,13反序形成得到数为31,31也是素数,则称13为回文素数。

    Private Sub Command1 2_Click( )

    Dim k As Integer,m As Integer,n AsInteger

    For k=10 T0 100

    If prim(k)Then

    m=__________

    n=0

    Do While m>0

    N=n*10+Im Mod l0

    M=m/10

    Loop

    If prim(n)Then

    MsgBox k&“,”&n

    End If

    End If

    Next k

    End Sub

    Public Function prim(n As Integer)As Boolean

    Dim j As Integer

    For j=2 To n/2

    If n Mod J=0 Then

    prim=__________

    Exit Function

    End If

    Next j

    prim=True

    Exit Function

    End Function

    横线处应填写的内容是( )。

    A.k Fake

    B.k True

    C.m False

    D.n True


    正确答案:A
    素数是只能被1和它本身整除的数,因此本题第二空填写False。click函数主要有两个功能,一个是返序,另一个是判断是不是回文素数。在for循环中判断k是不是回文素数,rn是代表即将判断的数字,也就是k。

  • 第3题:

    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}

  • 第4题:

    程序test.c的功能是:计算500~800区间内素数的个数cnt,并按所求素数的值从大到小的顺序,计算其间隔减、加之和,即第1个素数.第2个素数+第3个素数.第4个素数+第5个素数…的值sum。请编写函数count Value实现程序的要求,最后main函数调用函数writeOAT把结果cnt和Sum,输出到文件out.dat中。


    正确答案:
    【审题关键句】计算500~800区间内素数的个数,素数的值从大到小排序,再计算其间隔减、加之和,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数……的值。
    【解题思路】
    ①首先定义一个循环变量循环i和用于正负号转换的变量j,同时赋i的初值为-1。
    ②通过for循环对800到500的每个数字进行逐个的扫描,指定循环变量i的初值为800,当i值等于500停止循环,每执行一次循环,i的值便减1。(注意,本题for循环从大到小依次读取数据是根据题目要求设计的,这样得到的素数值其排序方式就是从大到小排序。)
    ③在每次执行for循环时,都调用素数判断函数isPrime判断当前的i值是否为素数,如果是素数,则素数计数变量cnt值加1,正负号转换变量j的值乘以-1,实现正负数的交替转换,最后将每次循环得到的i*j的值累加到求和变量 sum中。
    【参考答案】

  • 第5题:

    试题二(共 15 分)

    阅读以下说明和 C 程序代码,将应填入 (n) 处的字句写在答题纸的对应栏内。

    [说明]

    下面 C 程序代码的功能是:对于输入的一个正整数 n(100≤n<1000) ,先判断其是否是回文数(正读反读都一样的数) 。若不是,则将 n 与其反序数相加,再判断得到的和数是否为回文数,若还不是,再将该和数与其反序数相加并进行判断,依此类推,直到得到一个回文数为止。例如,278 不是回文数,其反序数为 872,相加后得到的 1150还不是回文数,再将 1150 与其反序数 511 相加,得到的 1661 是回文数。 函数 int isPalm(long m)的功能是:将正整数 m的各位数字取出存入数组中,然后判断其是否为回文数。若 m是回文数则返回 1,否则返回 0。

    [C 程序代码]

    #include <stdio.h>

    #include <stdlib.h>

    int isPalm(long m)

    { /*判断 m是否为回文数*/

    int i = 0, k = 0;

    char str[32];

    while (m > 0) { /*从个位数开始逐个取出 m的各位数字并存入字符数组 str*/

    str[k++] = (1) + '0';

    m = m / 10;

    }

    for(i = 0; i < k/2; i++) /*判断 str中的 k 个数字字符序列是否是回文*/

    if ( str[i] != str[ (2) ] ) return 0;

    return 1;

    }

    int main( )

    {

    long n, a, t;

    printf("input a positive integer:"); scanf("%ld",&n);

    if (n < 100 || n > =1000) return -1 ;

    while( (3) ) { /*n 不是回文数时执行循环*/

    printf("%ld -> ", n);

    for(a = 0, t = n; t > 0; ) { /*计算 n 的反序数并存入 a*/

    a = (4) *10 + t % 10; t = t / 10;

    } /*end of for*/

    n = (5) ; /*与反序数求和*/

    } /*end of while*/

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

    system("pause"); return 0;

    }


    正确答案:


  • 第6题:

    所谓“回文数”是指读一个自然数,从正方向读和反方向读,结果是一样的。例如:646,1551,891232198都认为是回文数。编一个程序,输入一个正整数,判定它是否为回文数。当输入的数为0时,则退出程序,否则继续循环执行程序。


    正确答案: ints,k;
    inti,j;
    int[]a=newint[20];
    boolpos;
    while(true)
    {
    s=-1;
    while(s<0)
    {
    Console.Write("请输入一个正整数或者只按一个数字0:");
    s=int.Parse(Console.ReadLine());
    if(s==0)return;
    }
    k=s;
    pos=true;
    i=-1;
    while(k>0)
    {
    i++;
    a[i]=k%10;
    k=k/10;
    }
    //注意:数组a的长度为(i+1)
    for(j=0;j<(i+1)/2;j++)
    if(a[j]!=a[i-j])
    {
    pos=false;
    break;
    }
    if(pos)Console.WriteLine("{0}是回文数。",s);
    elseConsole.WriteLine("{0}不是回文数。",s);
    }

  • 第7题:

    关于回文字符串,描述正确的是()。

    • A、回文字符串的长度一定是奇数
    • B、回文字符串的长度一定是偶数
    • C、回文字符串的长度可以是奇数也可以是偶数
    • D、回文字符串只要求首尾字母是一样的

    正确答案:C

  • 第8题:

    单选题
    关于回文字符串,描述正确的是()。
    A

    回文字符串的长度一定是奇数

    B

    回文字符串的长度一定是偶数

    C

    回文字符串的长度可以是奇数也可以是偶数

    D

    回文字符串只要求首尾字母是一样的


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

  • 第9题:

    问答题
    所谓“回文数”是指读一个自然数,从正方向读和反方向读,结果是一样的。例如:646,1551,891232198都认为是回文数。编一个程序,输入一个正整数,判定它是否为回文数。当输入的数为0时,则退出程序,否则继续循环执行程序。

    正确答案: ints,k;
    inti,j;
    int[]a=newint[20];
    boolpos;
    while(true)
    {
    s=-1;
    while(s<0)
    {
    Console.Write("请输入一个正整数或者只按一个数字0:");
    s=int.Parse(Console.ReadLine());
    if(s==0)return;
    }
    k=s;
    pos=true;
    i=-1;
    while(k>0)
    {
    i++;
    a[i]=k%10;
    k=k/10;
    }
    //注意:数组a的长度为(i+1)
    for(j=0;j<(i+1)/2;j++)
    if(a[j]!=a[i-j])
    {
    pos=false;
    break;
    }
    if(pos)Console.WriteLine("{0}是回文数。",s);
    elseConsole.WriteLine("{0}不是回文数。",s);
    }
    解析: 暂无解析

  • 第10题:

    阅读下列算法说明和代码,将应填入(n)处的语句写在对应栏内。

    【说明】

    本程序用古典Eratosthenes;筛选法求从2起到指定范围内的素数。如果要找出2~10中的素数,开始时筛中有2~10的数,然后取走筛中最小的数2,宣布它是素数,并把该素数的倍数都取走。这样,第一步以后,筛子中还留下奇数3、5、7、9;重复上述步骤,再取走最小数3,宣布它为素数,并取走3的倍数,于是留下5、7。反复重复上述步骤,直到筛中为空时,工作结束,求得2~10中的全部素数。

    【代码】

    include <stdio.h>

    define MAX 22500

    /*程序中用数组sieve表示筛子,数组元素sieve[i]的值为1时,表示数i在筛子中,值为-1时表示数i已被取走*/

    main()

    { unsigned int i, range, factor, k;

    int sieve[MAX];

    printf("please input the range:");

    scanf("%d", &range);/* range 指出在多大的范围内寻找素数*/

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

    (1);

    factor=2;

    while (factor<=range)

    { if((2)) /* 筛中最小数是素数 */

    { printf("%d\t", factor);

    k=factor;

    while (k<=range) /*移走素数的倍数 */

    { (3);

    k=(4);

    }

    }

    (5);

    }

    }


    正确答案:(1)sieve[i]=i (2)sieve[factor]>0 (3)sieve[k]=-1 (4)k+factor (5)factor++
    (1)sieve[i]=i (2)sieve[factor]>0 (3)sieve[k]=-1 (4)k+factor (5)factor++ 解析:本题考查在C语言中实现素数的选取。
    题目要求从指定范围内的数中选取其中的素数,并给出了相关的选取方法。在做题前我们首先需要清楚什么是素数,素数又叫质数,是指除1和自身之外,没有其他约数的正整数。—下面我们来分析程序。
    第(1)空在第一层循环体下面,题目要求用数组sieve表示筛子,但在程序中并没有给数组输入值,此空应该是在循环下往数组中存放数值,其存放的位置与数值的大小对应,因此,此空答案为sieve[i]=i。
    第(2)空是条件判断语句的条件,从注释中我们可以知道,这个条件判断语句的作用是筛中最小数是素数,是素数的话一定在数组中,元素的值就应该大于0。那么条件应该是判断数组中当前位置的值是否大于0,如果是,则执行判断语句下的语句,即筛选出这个数且这个数是素数。结合题目给出的条件,知道此空答案为sieve[factor]>0。
    第(3)空是移走素数的倍数这个循环下面的语句,此循环的作用就是移走当前最小素数的倍数,题目要求在移走了数值以后,数组中相应的值为-1,那么此空的作用应该是将数组中该移走数的相应值变为-1,因此,此空答案为sieve[k]=-1。
    第(4)空是紧接着上面一空来的,变量k中存放的是数组当前的下标,而变量factor中存放的是当前最小的素数。此空所在循环体的作用是移走当前最小素数的倍数,求倍数时,只要在该数的基础上加上该数,那就是两倍,再加一个就是三倍,由此直到最大范围。因此,此空答案应该是k+factor。
    第(5)空是while(factor=range)循环下的最后一条语句,我们从程序中可以看出,factor中存放的是当前的最小素数,同时也是此素数在数组中的下标位置。题目告诉我们在处理完当前素数后,应该去取下一个素数,下标位置往后移动。因此,此空答案为factor++。

  • 第11题:

    素数的求法

    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;

  • 第12题:

    补充程序Ccon0111.C,其功能是求20以内的所有素数,按每行显示4个素数输出。


    #define/**/N20/**/
    /**/flag=0;/**/
    /**/m++;/**/

  • 第13题:

    在考生文件夹下有一个工程文件sjt5.vbp。在窗体文件中已经给出了全部控件及部分程序。程序运行时,在文本框Text1中输入一个大于2的偶数,并单击“分解为”按钮,则可以将该偶数分解为两个素数之和,且要求其中一一个素数是所能够分解出的最小的素数(一个偶数有时可以分解为多种素数的组合,例如24可以分解为5和19,也可以分解为11和13,要求取含有最小素数的组合,如图8所示)。要求编写“分解为”按钮事件过程中“考生编写程序开始”和“考生编写程序结束”之间的代码.以实现上述功能。过程IsPrime用来判断一个数是否为素数,如果是,返回值为True,否则返叵值为False。 注意:不得修改原有程序和控件的属性。至少正确运行一次程序,且运行时在文本框中输入23456,单击“分解为”按钮,将结果显示在标签中,否则无成绩。最后把修改后的文件按原文件名存盘。


    正确答案:
    【知识点拨】素数的判断准则就是看该数除了l和其本身外有无其他约数。
    【审题分析】本题程序设计思路:两个整数之和为n的组合有:l 和n-1、2和n-2...i和n-i,在For循环中按前一个加数由小到大的顺序,依次通过调用函数IsPfime来判断每个组合中的两个加数是否均为素数,第一个找到的素数组合中即含有能够分解出的最小素数。由于1不是素数,故循环变量的初值从2开始;由于i和n-i的组合与n-i和i组合在本题中呵被视为相同组合,故循环变量的终值设定为n/2 即可。
    【操作步骤】
    【步骤】:打开考生文件中的本题工程文件sjt5 vbp,在代码编辑窗口的指定位置编写以下代码:
    参考代码:

    步骤2:按要求将文件保存至考生文件夹中。
    步骤3:按<F5>键运行程序,在文本框中输入23456,单击“分解为”按钮。

  • 第14题:

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

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

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

  • 第15题:

    以下关于素数正确的是()

    • A、素数是大于1的自然数
    • B、素数是只能被1整除的数
    • C、3是素数
    • D、1是素数

    正确答案:C

  • 第16题:

    “因为24不是素数,25不是素数,26不是素数,27不是素数,28不是素数,所以24至28之间没有素数。”这个推理是()推理。


    正确答案:完全归纳

  • 第17题:

    单选题
    以下关于素数正确的是()
    A

    素数是大于1的自然数

    B

    素数是只能被1整除的数

    C

    3是素数

    D

    1是素数


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