给定一个大于或等于3的正整数,判断它是不是一个素数.
算法:
  S1:输入n的值
  S2:i=2
  S3:n被i除,得余数r
  S4:如果r=0,表示n能被i整除,打印n不是素数,算法结束;否则执行S5
  S5:i=i+1
  S6:如果i<=n-1, (n/2、(n)1/2)返回s3;否则打印n是素数
  S7:结束
个人建议思路:
  1.随机产生一个20位数;
  2.将该20位数转换为电脑能够识别的二进制byte流;
  3.使用二进制方式进行除运算,判断该数是否是素数;高斯猜测,n以内的素数个数大约与n/lnn相当,或者说,当n很大时,两者数量级相同.20位数在它这个范围(n很大),随机数就比较好找,否则就不好找.其实这是个数学测试问题,不知道搂主为什么要用c#来写,而不用mathmaitic来做.

解决方案 »

  1.   

    TO :tjq_tang(过河兵) 
    其实很多问题都可以用数学来完成,但是对于初学者来说
    似乎应该多练习一些程序,这样才有得进步,特别是女生,
    本来学计算机,就没什么优势,就更应该努力
    我还有个问题想问一下怎样将20位数转换为电脑能够识别的二进制BYTE流
      

  2.   

    同意 tjq_tang(过河兵).练习商业化的程序,有助于你解决实际问题,增加工作经验。能对大程序框架有理解。
      

  3.   

    首先确定你计算机中,有没有内置的能表示20位整数的数据类型.如果没有自己写转换程序太复杂(:肯定不能表示)。
    如果能表示的话:
     for (int i=1*10E20 +1;; i+=2)//初始时i=100......1,共19个零
      {
           double k = sqrt(i);
        for (int k=2; i<k; i++)
                if (i%k==0)
                   {
                    printf ("找到一个素数:%d 。",i);
            goto exit;else printf (" %d 是素数。",n);
    }
      

  4.   

    首先确定你计算机中,有没有内置的能表示20位整数的数据类型.如果没有自己写转换程序太复杂(:肯定不能表示)。
    如果能表示的话:
     for (int i=1*10E20 +1;; i+=2)//初始时i=100......1,共19个零
      {
           double k = sqrt(i);
        for (int k=2; i<k; i++)
                if (i%k==0)
                   {
                    printf ("找到一个素数:%d 。",i);
            goto exit;
            }
      }
    exit:
       
    好久没有写C代码,不知对否
      

  5.   

    64整数最大的是
    (二进制:1111111111111111111111111111111111111111111111111111111111111111)
    (10进制:18446744073709551615),还好搂主老师提出的这个问题不是找出40位数的素数,而是20位数.Int64最大的位数也是20位.
    找这个20位数可以在10000000000000000000~18446744073709551615之间进行.至于找40位数的素数,可以将这个40位数分解为多个20位数的和.或者以其他方式分解.(这个难度系数不小的,可以向老师咨询一下)至于将10000000000000000000~18446744073709551615之间的数转换为2进制.
    系统函数[C#] System.Convert.ToString()的
    public static string ToString(
       short value,
       int toBase
    );
    但是它的范围在int32内进行的.可能得使用死方法了.
    比如使用原始的算法将一个整数转化为二进制数组.这方面的资料不少.
      

  6.   

    搂主要c程序还是c#程序?
    可以将同样的问题放在VC/MFC板块.可能会得到更有针对性的回答.
      

  7.   

    企业/政府 要信息化。
    如果要入手可以先学习一下c#的基础。
    1.比如一些基本控件的使用;
    2.对一些常识知识要有个大概的了解;
    3.多看msdn;至于写什么样的商业化程序,我个人认为你可仿照别人的软件做。
    1.简单如windows 计算器。实现它的大部分功能(别说,这个难度不小的)
    2.可以的话,做做数据库方面的东西。在学习里,我知道学籍管理不知道做过多少片了,还要学生作。也可以练练手的。不管怎么说,要多实践,最好能够在外面兼职,最好还有能够讨论的同学。这样可以提高速度的。最后就是坚持了。学校里还是要注重基础。开始是很痛苦的。希望楼主能够挺过.........
      

  8.   

    TO 君君 :这是老师留言的作业,?   这个难度不小,
    你可以看一下RSA  ------我在学计算网络的时候看到了RSA,那里好像说的意思是,通过现在有的数学知识我们还无法快速的判断出一素数来,正是因为这点才有RSA这版里有个女孩叫(XIXI公主)你可以找她,问一下,没有没好的办法。