話不多說,直接上代碼,註釋寫的很清楚
考慮到基礎問題,沒有用集合等一些方法來存儲數據,直接輸出到控制面板上了,並且爲了展現整個編程思路,就沒有去整合代碼,只需要實現輸出最終結果的只要註釋掉多餘的輸出就可以了
並且最後面附上了一個優化的質數求解方法,計算量會大大減少,這個體現的是一種算法思想
static void Main(string[] args)
{
//本程序用於求解10000以內的、尾號爲3、倒數第二位爲偶數的所有質數
/*****************************************************************************************
* /*編程思路1: *
* * 1、質數:除1和自身之外不能整除其他數,因此我們可以從2開始算,求解2-10000的質數 *
* * 2、每個數都需要去除以除1以外小於該數本身的數,若存在可整除的數,則不是質數 *
******************************************************************************************/
int count = 0;//用來計數
int count1 = 0;
int count2 = 0;
for (int i = 2; i < 10000; i++)//表示從2-10000以內的數
{
bool b = true;
for (int j = 2; j < i ; j++)//表示從2-i以內的數
{
if (i%j == 0)
{
b = false;
break;//不是質數則退出當前循環
}
}
if(b)//如果在上述循環中沒有執行if語句,則表示i爲質數
{
Console.WriteLine(i);//輸出10000以內的所有質數
count++;
/******************************************************************************************
* 輸出10000以內尾號爲3倒數第二位爲偶數的質數 *
* /*編程思路2: *
* * 1、獲取質數的位數 *
* * 2、根據不同位數求出尾號和倒數第二位爲偶數(取餘2爲0) *
******************************************************************************************/
switch(i.ToString().Length)//獲取質數i的長度
{
case 1://長度爲1,即爲1位數
if(i == 3)
{
Console.WriteLine(i);
count1++;
//不存在倒數第二位
}
break;
case 2://兩位數
if(i %10 == 3)
{
Console.WriteLine(i);
count1++;
if((i/10)%2==0)//倒數第二位爲偶數
{
Console.WriteLine(i);
count2++;
}
}
break;
case 3://3位數
if (i%100%10 == 3)
{
Console.WriteLine(i);
count1++;
if (((i % 100)/10) % 2 == 0)//倒數第二位爲偶數
{
Console.WriteLine(i);
count2++;
}
}
break;
case 4://四位數
if (i%1000%100%10 == 3)
{
Console.WriteLine(i);
count1++;
if (((i % 1000%100) / 10) % 2 == 0)//倒數第二位爲偶數
{
Console.WriteLine(i);
count2++;
}
}
break;
}
}
}
Console.WriteLine("共有{0}位質數",count);//輸出共有多少位質數
Console.WriteLine("共有{0}位尾號爲3的質數",count1);
Console.WriteLine("共有{0}位尾號爲3倒數第二位爲偶數的質數", count2);
Console.ReadKey();
//優化--採用根號減少計算數量,效果與上面一致
count = 0;//用來計數
for (int i = 2; i < 10000; i++)//表示從2-10000以內的數
{
bool b = true;
for (int j = 2; j < System.Math.Sqrt(i); j++)//表示從2-i以內的數
{
if (i % j == 0)
{
b = false;
break;//不是質數則退出當前循環
}
}
if (b)//如果在上述循環中沒有執行if語句,則表示i爲質數
{
Console.WriteLine(i);//輸出i
count++;
}
}
Console.WriteLine("共有{0}位質數", count);//輸出共有多少位質數
Console.ReadKey();
}