论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

趣味算法二例(1)

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:45:50

歌德巴赫猜想
数学上经常有一些猜想,这些问题的严格数学证实是很繁琐的,但是用计算机却能很轻
松地进行验证。
下面的一个程序可以验证2000以内的正偶数都能分解成二个素数之和,即验证歌德巴赫猜
想在2000范围内的正确性。
    方法: 先将整数分解成二部份,然后判定二个素数是否均为素数,若是则满足题意
,否则需要重新分解和判定。
    判定一个数是否为素数有很多方法,从定义上说,判定一个整数n是否为素数就是要
判定其是否能除1和n之外任意整数整除;若都不能整除,则n为素数。
    在程序里不必从1到n-1的数一个个去试,只用从2开始到该整数的一半去试即可,这
样可以大缩短判定的时间。

代码如下:
#include<stdio.h>
su(int n)
{   int i;
    for(i=2;i<=(n-1)/2;i++)
        if(n%i==0)
            return 0;    /*不是素数,返加0*/
        return 1;        /*否则返回1*/
}

main()
{   int i,n;
    for(i=4;i<=2000;i+=2)  /*判定的数为4到2000的正偶数*/
    {   for(n=2;n<i;n++)
            if(su(i-n))
            {   printf("%d=%d+%d\n",i,n,i-n); 假如均为素数,打印该等式并退出循环*/
                break;
            }
        if(n==i)printf("error %d\n",i);  /*假如不成立,打印出错信息*/
    }
}

部分运行结果如下:
1990=3+1987
1992=5+1987
1994=7+1987
1996=3+1993
1998=5+1993
2000=3+1997

------------------------------------------------------------

回文素数

素数一直是数学喜欢讨论的题目,在素数家族中,有一类非凡的素数称为回文素数,
所谓回文素数是指对一个整数n从左到右和从右到左读其结果什相同且都为素数,即
称该整数n为回文素数。现在编一个程序找到1000的回文素数。
    因为不超过1000的整数可以表示成:
           100*i+10*j+k
其中i,j,k均为整数,因此该整数的反序可以写成:
           100*k+10*j+i
但是有二种非凡情况需要考虑,即一位数和二位数的反序数应该仍保持位数不变,例
如,12的反序应该为21而不是210。

#include<stdio.h>
su(int n)
{   int i;
    for(i=2;i<=(n-1)/2;i++)
        if(n%i==0)      /*不是素数返回0*/
            return 0;
        return 1;       /*否则返回1*/
}

main()
{
    int i,j,l,k,s;
    printf("Palindrome primes not greater than 1000:\n");
    for(i=0;i<=9;i++)    /*枚举百位数所有可能情形*/
        for(j=0;j<=9;j++)  /*枚举十位数所有可能情形*。
            for(k-0;k<=9;k++)  /*枚举个位数所有可能情形*/
            {   s=i*100+j*10+k;
                l=k*100+j*10+i;   /* l为要的反序数*/
                if(i==0&&j==0) l/=100; /*处理二种非凡情形*/
                else  if(i==0) l/=10;
                if(s>10&&s==l&&su(s))  /*假如二数均为素数,打印该数*/
                printf("%d\t",s);
            }
}

运行结果:

Palindrome primes not greater than 1000:
11     101    131     151     181    191    313   353
373    727    757     787     797    919    929

上一篇:{应用}趣味算法二例 人气:6680
下一篇:{应用}趣味算法二例(2) 人气:5331
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058