早教吧 育儿知识 作业答案 考试题库 百科 知识分享

c选取出100以上1000以内所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数(如293).C#选取出100以上1000以内所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数(如

题目详情
c选取出100以上1000以内所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数(如293).C#
选取出100以上1000以内所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数(如293).计算并输出上述这些素数的个数CN以及这些素数值的和SUM.请编写函数实现程序要求.C# 实现
要实现代码
▼优质解答
答案和解析

最快的代码是先进行判素处理.

 

取得1000以内的所有素数.

List GetAllPrimeNumber(int num)
{
     if(num<2) throw new Exception("必须是大于1的整数");
     List primenumber = new List();
     primenumber.Add(2);
    if(num<3) return primenumber;

    for(int s =3;s<=num;s+=2)
    {
         int k = (int)Math.Sqrt(s);
         //取出小于S开方的最大整数
        for(int i =0;i        {
             if(primenumber[i]>k)
             {
                   //是质数的情况
                  primenumber.Add(s);
                  break;
              }
            if(s%primenumber[i]==0)
                break;
        }
    }
    return primenumber;
}

该方法可以获得num内的所有素数.调用方法是

List<int> allPrimeNum = GetAllPrimeNumber(1000);

即可获得1000以内的所有素数.目前这种方法绝对速度够快. 运行次数绝对最少.实现原因是将2,3存入list中,从4开始,依次用list中小于等于当前开方数的素数去除当前数,若均除不尽,则加入链表.以100为例,不需要从2到10,也不需要从2,3到9的质数,只须10以前的素数即可.原理是,因为质数为2,所以不须要再使用4,6,8,10等数字去试,若其中任意一个能除尽,那么2一定能除尽,3也同样,其实判素只需要用小于其开方的素数去试就可知道了!虽然在100以前讨不到什么便宜,但是到1000以后却能讨到大便宜.

 

接回你的问题,你的问题是求个数与和,将所有素数都求出来了,求个数与和还难么?使用lamabad表达式即可!

 

IENumerable<int> result = allPrimeNum.Where(_Item => _Item>100 && _Item/100 == (_Item%10+(_Item%100)/10)%10);

 

该式会求出你所以要求的素数,不要说和与个数,它可以一个个地打印出来!

Item>100,表示在allPrimeNum中大于100的,_Item/100 == (_Item%10+(_Item%100)/10)%10相信你能看懂,它是说_item/100表示百位数._item%10表示的是个位数.而(_item%100)/10是十位数,也可以写作(_item/10)%10).个数与10位相加后与10取模,所以后一个条件就是你表示的个位与十位相加取模与百位相同的条件.

 

那么你要的结果就是:

CN = result.Count();

SUM = result.Sum();