[b]Bai tap 20[/b]
Trang 1 trong tổng số 1 trang
[b]Bai tap 20[/b]
Yêu cầu bài toán:Tìm 2 số nguyên tố có tổng bằng một số chẵn cho trước.Ý Tưởng:
Các bạn phải nhập n là một số chẵn cho trước và n>=3.Các bạn nên sử dụng try ....catch.
B1:Tìm các số nguyên tố bé hơn n.
B2:Trong quá trình tìm ,ta tìm được một số nguyên tố nào thì đưa nó vào mảng tĩnh a(cũng có thể đưa vào Stack hay hàng đợi).
B3:Sau khi đã có được mãng a ta lần lượt lấy một phần tử bất kỳ so sánh với tấc cả phần tử còn lại.Ở đây mình lấy phần tử đầu so sánh cho dễ.So sánh được hiểu là :
phần tử thứ i+phần tử thứ j==n(chẵn) và (phần tử thứ i+phần tử thứ j)%2==0 và i>j nhe bạn.
Đây là code của mình:
using System;
using System.Collections.Generic;
using System.Text;
namespace bai20
{
class NguyenToChan
{ private int n;
//Khoi tao gia tri n
public NguyenToChan()
{
this.n = 0;
}
//Ham nhap lieu cho n
public void input()
{
Console.Write("Ban hay nhap n>0 va n chan. n=");
this.n = int.Parse(Console.ReadLine());
}
public bool test(int a)
{
if (a <= 1)
{
Console.WriteLine("So {0} khong phai la so nguyen to", a);
return false;
}
else
{
bool ngto = true;
int can = (int)Math.Sqrt(a);
for (int i = 2; i <= can; i++)
{
if (a % i == 0)
{
ngto = false;
break;
}
}
return ngto;
}
}
public bool XetChanTong(int []mang,int pt)
{
bool kq = false;
int temp=0;
for (int i = 0; i <= pt; i++)
for (int j = 0; j <= pt; j++)
{
temp = mang[i] + mang[j];
if (temp % 2 == 0 && temp == this.n && i < j)
{
Console.WriteLine(mang[i] + " " + mang[j]);
kq = true;
}
}
return kq;
}
static void Main(string[] args)
{
Console.WriteLine("Bai Toan:");
Console.WriteLine("Tim 2 so nguyen to co tong bang so chan cho truoc");
NguyenToChan ntc = new NguyenToChan();
ntc.input();
try
{
if ((ntc.n%2!=0)||(ntc.n<3)) throw new Exception();
int dem = 0;
int[] mang = new int[100];
for (int i = 2; i <= ntc.n; i++)
if (ntc.test(i))
mang[dem++] = i;
if (!ntc.XetChanTong(mang, dem))
Console.WriteLine("Khong co cap so nguyen to nao");
}
catch
{
Console.WriteLine("Thong bao!,Ban nhap khong dung");
}
}
}
}
//Mình rất mong nhận được ý kiến nhận xét từ bài này của các bạn.
Các bạn phải nhập n là một số chẵn cho trước và n>=3.Các bạn nên sử dụng try ....catch.
B1:Tìm các số nguyên tố bé hơn n.
B2:Trong quá trình tìm ,ta tìm được một số nguyên tố nào thì đưa nó vào mảng tĩnh a(cũng có thể đưa vào Stack hay hàng đợi).
B3:Sau khi đã có được mãng a ta lần lượt lấy một phần tử bất kỳ so sánh với tấc cả phần tử còn lại.Ở đây mình lấy phần tử đầu so sánh cho dễ.So sánh được hiểu là :
phần tử thứ i+phần tử thứ j==n(chẵn) và (phần tử thứ i+phần tử thứ j)%2==0 và i>j nhe bạn.
Đây là code của mình:
using System;
using System.Collections.Generic;
using System.Text;
namespace bai20
{
class NguyenToChan
{ private int n;
//Khoi tao gia tri n
public NguyenToChan()
{
this.n = 0;
}
//Ham nhap lieu cho n
public void input()
{
Console.Write("Ban hay nhap n>0 va n chan. n=");
this.n = int.Parse(Console.ReadLine());
}
public bool test(int a)
{
if (a <= 1)
{
Console.WriteLine("So {0} khong phai la so nguyen to", a);
return false;
}
else
{
bool ngto = true;
int can = (int)Math.Sqrt(a);
for (int i = 2; i <= can; i++)
{
if (a % i == 0)
{
ngto = false;
break;
}
}
return ngto;
}
}
public bool XetChanTong(int []mang,int pt)
{
bool kq = false;
int temp=0;
for (int i = 0; i <= pt; i++)
for (int j = 0; j <= pt; j++)
{
temp = mang[i] + mang[j];
if (temp % 2 == 0 && temp == this.n && i < j)
{
Console.WriteLine(mang[i] + " " + mang[j]);
kq = true;
}
}
return kq;
}
static void Main(string[] args)
{
Console.WriteLine("Bai Toan:");
Console.WriteLine("Tim 2 so nguyen to co tong bang so chan cho truoc");
NguyenToChan ntc = new NguyenToChan();
ntc.input();
try
{
if ((ntc.n%2!=0)||(ntc.n<3)) throw new Exception();
int dem = 0;
int[] mang = new int[100];
for (int i = 2; i <= ntc.n; i++)
if (ntc.test(i))
mang[dem++] = i;
if (!ntc.XetChanTong(mang, dem))
Console.WriteLine("Khong co cap so nguyen to nao");
}
catch
{
Console.WriteLine("Thong bao!,Ban nhap khong dung");
}
}
}
}
//Mình rất mong nhận được ý kiến nhận xét từ bài này của các bạn.
nguyenthanhhau- Tổng số bài gửi : 6
Join date : 05/01/2011
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết
|
|