Sưu tầm bởi boy_dt3; nguồn trathai.vn
bài 1(1/500)
/* Bai tap 9_1 - Dem so lan xuat hien cac ky tu trong chuoi */
#include <stdio.h>
#include <ctype.h>
void main()
{
char chuoi[80];
int i = 0, count = 0;
printf("\nNhap vao mot chuoi bat ky : ");
gets(chuoi);
while (chuoi[i] != 0)
{
if (isalpha(chuoi[i++]))
count++;
}
printf("So ky tu trong chuoi = %d", count);
}
bài 2(2/500)các bài toán cơ bản
#include <stdio.h>
void main()
{
int num, tram, chuc, donvi, count = 0;
for (num = 100; num < 1000; num++)
{
donvi = num % 10;
chuc = (num / 10) % 10;
tram = num / 100;
if (donvi * donvi * donvi + chuc * chuc * chuc + tram * tram * tram == num)
{
cin >> a[i]; //nhap gia tri tu ban phim cho phan tu thu
i
} //ket thuc vong lap
} //ket thuc ham NhapMang
Cách 2: Sử dụng con trỏ như là biến mảng
void NhapMang(float *a, int &n){
cout << "Nhap N = "; //thong bao cho nguoi dung nhap so luong
cin >> n; //nhap gia tri cho bien n tu ban phim
cout << "Nhap mang" << endl; //thong bao qua trinh nhap bat dau
for (int i = 0; i < n ; i++){ //vong lap duyet tu chi so 0 den n-1
cout << "a[" << i << "] = "; //moi lan: thong bao phan tu sap duoc
nhap
cin >> *(a+i); //nhap gia tri tu ban phim cho phan tu thu
i
} //ket thuc vong lap
} //ket thuc ham NhapMang
Ở đây a được hiểu là địa chỉ của đầu mảng, tương đương với a[0]
và (a+i) là địa chỉ của phần tử thứ i trong mảng
Cách 3: Kết hợp 2 kiểu trên
void NhapMang(float *a, int &n){
cout << "Nhap N = "; //thong bao cho nguoi dung nhap so luong
cin >> n; //nhap gia tri cho bien n tu ban phim
cout << "Nhap mang" << endl; //thong bao qua trinh nhap bat dau
for (int i = 0; i < n ; i++){ //vong lap duyet tu chi so 0 den n-1
cout << "a[" << i << "] = "; //moi lan: thong bao phan tu sap duoc
nhap
cin >> a[i]; //nhap gia tri tu ban phim cho phan tu thu
i
} //ket thuc vong lap
} //ket thuc ham NhapMang
cin >> *(a+i); //nhap gia tri tu ban phim cho phan tu thu
i
} //ket thuc vong lap
} //ket thuc ham NhapMang
int kiemtra_snt(int x){ // tra ve 1 neu x la snt, nguoc lai tra ve 0
for(int i=2; i<=sqrt(x); i++)
if(x%i==0)return 0; //x chia het cho i => x khong phai la snt
return 1;
}
void lietke_snt(int a[], int n){ //ham in ra cac so nguyen to
for(int i=0; i < n; i++)
if(kiemtra_snt(a[i])) cout<<a[i]<<" ";
cout<<endl;
}
int dem_snt(int a[], int n){ //ham tra ve so luong so nguyen to
int c=0; //khai bao bien c dung de dem snt
for(int i=0; i < n; i++)
if(kiemtra_snt(a[i])) c++; //tang bien dem len 1
return c; //tra ve so luong snt dem duoc
}
int tong_snt(int a[], int n){ //ham tra ve so luong so nguyen to
int t=0; //khai bao bien t dung de tinh tong
for(int i=0; i < n; i++)
if(kiemtra_snt(a[i])) t += a[i]; //cong luy tien vao bien t
return t; //tra ve tong cac so nguyen to
}
void main(void)
{
clrscr(); //xoa man hinh
int a[100]; //khai bao bien mang a co 100 phan tu so nguyen
void main(){
int x, i, n, min, max;
cout << "Nhap so luong n = "; cin >> n; //nhap so luong
if ( n > 0 ) { //so luong > 0
cout<<" Gia tri phan tu thu dau tien = "; cin >> x; //nhap a[0]
min = max = x; //min=max=a[0]
for ( i = 2 ; i<=n; i++ ){ //vong lap i=2->n
cout<<" Gia tri phan tu thu "<<i<<" = "; cin >> x; //nhap a[i]
if ( x < min ) min = x; //cap nhat min
if ( x > max ) max = x; //cap nhat max
}
cout << "Gia tri lon nhat = " << max << endl; //in ket qua
cout << "Gia tri nho nhat = " << min << endl;
}
}
Đề bài: Nhập n phần tử số nguyên, in ra màn hình giá trị nhỏ nhất và lớn nhất trong mảng
Cách giải 2: dùng mảng (kinh điển)
+ nhập mảng n phần tử số nguyên từ bàn phím (đã có thuật toán và code ở trên)
+ gán tạm thời min và max bằng phần tử đầu tiên
+ duyệt qua toàn mảng: nếu giá trị đang duyệt bé hơn min hoặc lớn hơn max thì cập nhật lại min và max
#include <iostream.h>
void NhapMang(int *a, int &n){
cout << "Nhap N = "; cin >> n;
cout << "Nhap mang" << endl;
for (int i = 0; i < n ; i++){
cout << "a[" << i << "] = ";
cin >> *(a+i);
}
}
void TimMinMax(int a[], int n, int &min, int &max){
Đề bài: Nhập n phần tử số nguyên, in ra màn hình giá trị nhỏ nhất và lớn nhất trong mảng
Cách giải 3: dài dòng nhất
+ nhập mảng n phần tử số nguyên từ bàn phím (đã có thuật toán và code ở trên)
+ sắp xếp tăng dần (hoặc giảm dần)
+ nếu sắp xếp tăng dần thì min sẽ là phần tử đâu tiên, và max sẽ là phần tử cuối cùng trong mảng đã sắp
xếp.
#include <iostream.h>
void NhapMang(int *a, int &n){
cout << "Nhap N = "; cin >> n;
cout << "Nhap mang" << endl;
for (int i = 0; i < n ; i++){
cout << "a[" << i << "] = ";
cin >> *(a+i);
}
}
void SapXep(int a[], int n) { //sắp xếp tăng dần
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
if ( a[i] > a[j] ){
int tg = a[i];
a[i] = a[j];
a[j] = tg;
}
}
void main(){
int a[100], n;
NhapMang (a, n);
SapXep (a, n);
cout << "Gia tri nho nhat = " << a[0] << endl;
cout << "Gia tri lon nhat = " << a[n-1] << endl;
for (int i = 0; i < n; i++) if (a[i] == x) cout << i << " ";
}
void main(){
int a[100], n, x, d;
NhapMang (a, n);
cout << "Gia tri tim kiem = "; cin >> x;
d == DemSoLan (a, n, x);
if (d > 0){
cout << "Tim thay " << x << " (" << d << " lan) tai vi tri: ";
LietKe (a, n, x);
}
else
cout << "Khong tim thay " << x;
}
Đề bài: Nhập n phần tử số nguyên. Nhập phần tử cần tìm kiếm X. Đưa ra màn hình "TÌM THẤY"
nếu có X trong mảng, ngược lại báo "KHÔNG THẤY"
#include <iostream.h>
void NhapMang(int a[], int &n){
cout << "Nhap N = "; cin >> n;
for (int i = 0; i < n ; i++){
cout << "a[" << i << "] = "; cin >> a[i];
}
}
int TimKiem(int a[], int n, int x) {
for (int i=0; i < n; i++) if(a[i]==x) return 1;
return 0;
}
void main(){
int a[100], n, x;
NhapMang (a, n);
int main()
{
int a,b;
cout<<"Nhap a,b"; cin>>a>>b;
int x= abs(a), y= abs(b), r;
while (y!=0)
{
r=x%y;
x= y;
y= r;
}
cout<<"USCLN="<<x;
}
Hoặc
Code:
#include <iostream.h>
#include <math.h>
int main()
{
int a,b;
cout<<"Nhap a,b"; cin>>a>>b;
a=abs(a);
b=abs(b);
while(a-b)
{
if (a>b)
a=a-b;
else
b=b-a;
}
cout<<"so dv d=";
cin>>d;
cout<<"he so k="; cin>>k;
a[0]=d;
for(i=1; i<100; i++){
a[i]=(a[i-1]%10)*k + a[i-1]/10;
if(a[i]==d)break;
}
if((i<100)&&(a[i-1]%10!=0)){
cout<<"N=";
for(j=i-1;j>=0;j ) cout<<a[j]%10;
}else cout<<"khong co nghiem";
}
Bài tập: Nhập mảng n phần tử số nguyên, nhập giá trị m, in ra màn hình các số không lớn hơn m theo
thứ tự tăng dần, các số còn lại theo thứ tự giảm dần
Phân tích: Cho một ví dụ để các bạn hiểu yêu cầu nhé: Giả sử mảng nhập vào có 10 phần tử là: 2 9 8 3
7 4 6 5 1 0 và m là 6 thì cần phải in ra: 0 1 2 3 4 5 6 9 8 7
Bài này có nhiều cách giải, sau đây là 1 cách:
+khai báo mảng, khai báo biến số lương n, khai báo biến m
+Nhập mảng: nhập n, nhập n phần tử
+nhập m
+sắp xếp toàn bộ mảng theo thứ tự tăng dần
+tìm k là vị trí phần tử bé nhất trong mảng đã sắp xếp nhưng lớn hơn m
+từ k đến cuối mảng: sắp xếp giảm dần (có thể dùng thuật toán soi gương ở đây)
+in mảng ra màn hình sẽ được kết quả mong muốn.
#include <iostream.h>
void NhapMang(int *a, int &n){
cout << "Nhap N = "; cin >> n;
for (int i = 0; i < n ; i++){
cout << "a[" << i << "] = ";
sap_xep(a,n,m);
liet_ke(a,n);
}
Các bước trong code trên là y hệt với quá trình phân tích, nên malyfo ko viết chú thích vào nữa hẳn các bạn
cũng hiểu cả!
phần trước có bài bài tập gptb2 với hệ số a, b, c bất kỳ, đã post 2 bài là gptb1 và gptb2 riêng biệt, nhưng
k thấy có bạn nào ghép nó lại cả
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
void gptb2(float a, float b, float c){
float d,x1,x2;
d=b*b-4*a*c;
if(d>=0){
x1=(-b-sqrt(d))/(2*a);
x1=(-b+sqrt(d))/(2*a);
cout<<"pt co 2 nghiem thuc"<<endl
<<"nghiem thuc 1="<<x1<<endl
<<"nghiem thuc 2="<<x2<<endl;
}
else{
cout<<"pt k co nghiem thuc\n";
cout<<"pt co 2 nghiem phuc lien hop"<<endl;
float thuc,ao;
thuc=-b/2/a;
ao=sqrt(-d)/2/a;
cout<<"nghiem ao 1="<<thuc<<"-i"<<ao<<endl;
cout<<"nghiem ao 2="<<thuc<<"+i"<<ao<<endl;
}
}
if ( x % i == 0 ) //x chia hết cho i, thì i là ước số của x
t += i; //tăng biến chứa tổng
return t == x; //so sánh: nếu tổng bằng x thì x là số hoàn hảo
}
void main(){
int n;
cout << "Nhap n = "; cin >> n;
cout << "Cac so tu nhien hoan hao: ";
for ( int i = 1; i <= n; i ++ )
if ( kiem_tra ( i ) )
cout << i << " ";
}
giờ viết cái hàm tìm kiếm nhị phân
với đầu vào là mảng đã sắp xếp tăng dần, nếu thấy trả về vị trí tìm thấy, nếu không tìm thấy thì trả về 0
Phân tích: với đầu vào là mảng đã sắp xếp tăng dần, khi bắt đầu tìm kiếm ta truyền vào left là chỉ số
đầu tiên ( thường là 0) và right là chỉ số của phần tử cuối cùng (có n phần tử, chỉ số của phần tử đầu là
0 thì chỉ số của phần tử cuối cùng là n-1 )
nếu giá trị x cần tìm lớn hơn giá trị giữa left và right ( m = (l+r)/2 )thì có nghĩa x ở bên phía phải, khi
đó thay biên trái (left) bằng giá trị giữa cộng 1 ( l = m + 1 )
ngược lại x ở bên trái, khi đó cập nhật biên phải
cho đến khi biên trái = biên phải thì dừng
kiểm tra lại x có bằng a[l] không? , nếu bằng thì trả về vị trí, ngược lại trả về 0
#include <iostream.h>
int tk_np(int a[], int x, int l, int r){
while(l<r){
int m = (l+r)/2;
if(x>a[m])
l=m+1;
else
r=m;
cin>>n;
for (int i=0;i<n;i++)
{
cout<<"a["<<i<<"]=";
cin>>a[i];
}
cout<<setprecision(0)<<setiosflags(ios::fixed);
cout<<endl;
cout<<setw(10)<<"TT"<<setw(10)<<"Diem"<<setw(20)<<"Xep loai"<<endl;
for (int i=0;i<n;i++)
{
char *xeploai;
if (a[i]<5)
xeploai="Yeu";
else if(a[i]<7)
xeploai="Trung Binh";
else if(a[i]<9)
xeploai="Kha";
else
xeploai="Gioi";
cout<<setw(10)<<i<<setw(10)<<a[i]<<setw(20)<<xeploai<<endl;
}
getch();
}
Đề Bài: Nhập mảng n phần tử số nguyên, kiểm tra xem mảng có phải là tăng dần không? nếu
không phải thì sắp xếp tăng dần. Nhập số nguyên cần tìm kiếm m, tìm kiếm theo thuật toán tìm
kiếm nhị phân. nếu thấy báo số lượng tìm thấy, vị trí tìm thấy, ngược lại thông báo không thấy.
Sau khi tìm xong, hỏi có tìm nữa khôg? nếu tìm nữa thì lại nhập m, rồi tìm y chang như trên cứ
thế cho đến khi trả lời là không muốn tìm nữa thì thôi
#include <iostream.h>
}
void main(){
int a[100], n;
NhapMang(a, n);
if(! KiemTra_TangDan(a, n)) SapXep_TangDan(a, n);
int m, i;
cout << "Mảng sắp xếp tăng dần:";
for(i = 0; i < n; i++) cout << a[i] << " ";
cout << endl;
cout << "Nhap gia tri can tim: "; cin >> m;
if( i = TimKiem_NhiPhan(a, n, m) )
cout << m << " o vi tri: " << i << endl;
else
cout << " Khong co phan tu " << m << " trong day " << endl;
}
Chú ý là bài trên chưa có tìm số lượng.
và cũng chưa làm được "Sau khi tìm xong, hỏi có tìm nữa khôg? nếu tìm nữa thì lại nhập m, rồi tìm y chang
như trên cứ thế cho đến khi trả lời là không muốn tìm nữa thì thôi"
Giải quyết bài toán kiểu "Sau khi tìm xong, hỏi có tìm nữa khôg? nếu tìm nữa thì lại nhập m, rồi tìm y
chang như trên cứ thế cho đến khi trả lời là không muốn tìm nữa thì thôi"
cụ thể cho bài trên
Code:
//các hàm ở trên k post lại nhé
void main(){
int a[100], n;
NhapMang(a, n);
if(! KiemTra_TangDan(a, n)) SapXep_TangDan(a, n);
int m, i;
cout << "Mang sap xep tang dan:";
for(i = 0; i < n; i++) cout << a[i] << " ";
int m = (i+j)/2;
if(x>a[m])
i=m+1;
else
j=m;
}
if(x == a[i]){
int soluong = 0;
int k=i;
while((x==a[k])&&(k++ < n))soluong++;
cout <<"Tim thay "<<x<<" xuat hien "<<soluong<<" lan trong mang"<<endl;
}else
cout <<"Khong tim thay "<<x<<" trong mang"<<endl;
}
và ghép lại toàn bộ sẽ là
Code:
#include <iostream.h>
void NhapMang(int *a, int &n){
cout << "Nhap N = "; cin >> n;
for (int i = 0; i < n ; i++){
cout << "a[" << i << "] = ";
cin >> a[i];
}
}
void SapXep_TangDan(int a[], int n){
for(int i=0; i<n-1; i++)
for(int j=i+1; j<n; j++)
if(a[i]>a[j]){
int tg=a[i];
a[i]=a[j];
for(i = 0; i < n; i++) cout << a[i] << " ";
cout << endl;
char c;
do{
cout << "Nhap gia tri can tim: "; cin >> m;
TimKiem_NhiPhan(a, n, m);
cout<<"Tim tiep khong? (c/k)"; cin>>c;
}while(c=='c'||c=='C');
}
Nhập mảng n phần tử số nguyên, tìm giá trị phần tử xuất hiện nhiều nhất trong mảng, nếu có
nhiều giá trị khác nhau cùng xuất hiện nhiều nhất thì liệt kê hết các giá trị đó ra.
ví dụ 1:
có 11 phần tử: 1 4 4 2 2 4 5 6 3 6 6
thì thông báo
giá trị 4 xuất hiện 3 lần
giá trị 6 xuất hiện 3 lần.
ví dụ 2:
có 12 phần tử: 1 2 3 3 3 2 2 3 3 4 4 5
thì thông báo
giá trị 3 xuất hiện 5 lần
Phân tích:
sau khi khai báo mảng rồi nhập mảng
ta dùng 1 mảng đếm, lưu số lần xuất hiện của từng phần tử
tức là d[i] = đếm số lần xuấthiện a[i] trong mảng a
sau đó tìm max trong mảng đếm
tức là max = MAX { d[i] }
giả sử max = d[k] thì giá trị xuất hiện max lần chính là a[k]
các bạn chú ý code sao cho không để tình trạng báo trùng kết quả nhé
đừng để với trường hợp
ví dụ 2:
nếu có nhiều giá trị khác nhau cùng xuất hiện nhiều nhất thì liệt kê hết các giá trị đó ra.
ví dụ 1:
có 11 phần tử: 1 4 4 2 2 4 5 6 3 6 6
thì thông báo
giá trị 4 xuất hiện 3 lần
giá trị 6 xuất hiện 3 lần.
ví dụ 2:
có 12 phần tử: 1 2 3 3 3 2 2 3 3 4 4 5
thì thông báo
giá trị 3 xuất hiện 5 lần
Phân tích cách 2
sau khi có mảng n phần tử số nguyên
ta sắp xếp tăng dần(hoặc giảm dần cũng OK) mảng đó
khi đó cũng dùng mảng đếm d để lưu số lần xuất hiện của từng phần tử (chỗ này có khác đi 1 tí
để dễ dàng việc loại bỏ giá trị lặp hơn
bằng cách duyệt từ đầu đến hết mảng đã sắp xếp
mỗi khi gặp giá trị trùng (trùng thì đứng cạnh nhau do đã sắp xếp) thì tăng số biến đếm thôi
d[0]=1;
for( i = 1; i < n; i++ ) d[i] = ( a[i]==a[i-1] ) ? d[i-1]+1 : 1 ;
khi đó tìm max = giá trị max trong mảng d
rồi liệt kê lại các giá trị a[k] tương ứng với d[k] có giá trị bằng max
#include <iostream.h>
void NhapMang(int *a, int &n){
cout << "Nhap N = "; cin >> n;
for (int i = 0; i < n ; i ++){
cout << "a[" << i << "] = ";
cin >> a[i];
}
}
void SapXep_TangDan(int a[], int n){
NhapMang(a, n);
SapXep_TangDan(a, n);
Dem(a, d, n);
LietKe(a, d, n);
}
Viết chương trình đọc và 2 số nguyên và in ra kết quả của phép (+), phép trừ (-), phép nhân (*),
phép chia (/). Nhận xét kết quả chia 2 số nguyên.
#include<iostream.h>
#include<math.h>
int main()
{
int a,b; //hai toan hang a,b
char ch;//dau cua phep toan
int s;
cout<<"Nhap a="; cin>>a;
cout<<"Nhap b="; cin>>b;
cout<<"Nhap toan hang ch="; cin>>ch;
switch (ch)
{
case '+':
s=a+b;
cout<<a<<ch<<b<<"="<<s;
break;
case '-':
s=a-b;
cout<<a<<ch<<b<<"="<<s;
break;
case '*':
s=a*b;
cout<<a<<ch<<b<<"="<<s;
Viết chương trình nhập vào một số a bất kỳ và in ra giá trị bình phương (a2), lập phương (a3) của a và giá trị
(a4).
Code:
#include<iostream.h>
#include<math.h>
int main()
{
double a;
cout<<"Nhap a=";
cin>>a;
double a2,a3,a4;
a2=pow(a,2);
a3=pow(a,3);
a4=pow(a,4);
cout<<endl<<"a2="<<a2;
cout<<endl<<"a3="<<a3;
cout<<endl<<"a4="<<a4;
}
Viết chương trình nhập vào số giây từ 0 đến 86399, đổi số giây nhập vào thành dạng "gio:phut:giay", mỗi
thành phần là một số nguyên có 2 chữ số. Ví dụ: 02:11:05
Code:
#include<iostream.h>
int main()
{
long int num;
int h,m,s;
cout<<"Nhap so:"; cin>>num;
//S la so giay
s=num%60;
num=num/60;
}while(x<=0);
if (x%2==0)
cout<<"X la so chan";
else
cout<<"X la so le";
}
Viết chương trình nhập vào 4 số nguyên. Tìm và in ra số lớn nhất.
#include<iostream.h>
int main()
{
int a,b,c,d;
cout<<"Nhap a,b,c,d";
cin>>a>>b>>c>>d;
int max,m1,m2;
max=(m1=(a>b)?a:b)>(m2=(c>d)?c:d)?m1:m2;
/*
Hoac
m1=(a>b)?a:b);
m2=(c>d)?c:d);
max=m1>m2?m1:m2;
*/
cout<<"Max="<<max;
}
Bài 5: Viết chương trình nhập vào số giây, đổi số giây nhập vào thành dạng "gio:phut:giay", mỗi
thành phần là một số nguyên có 2 chữ số.
Code:
#include <iostream.h>
void main(){
long t;
cout<<"Nhap tong so giay can quy doi:"; cin>>t;
int m = t/60%60;
int h = t/60/60%24;
if(h<10)cout<<0; cout<<h<<':';
if(m<10)cout<<0; cout<<m<<':';
if(s<10)cout<<0; cout<<s;
}
Nếu muốn viết ra giờ:phút:giây am/pm
thì ta chỉnh một chút như sau:
Code:
#include <iostream.h>
void main(){
long t;
cout<<"Nhap tong so giay can quy doi:"; cin>>t;
int s = t%60;
int m = t/60%60;
int h = t/60/60%24;
if(h<10)cout<<0;
if(h>12)cout<<(h-12)<<':'; else cout<<h<<":";
if(m<10)cout<<0; cout<<m<<':';
if(s<10)cout<<0; cout<<s;
if(h>12)cout<<" pm"; else cout<<" am";
}
Áp dụng bài trên, viết 1 hàm quy đổi, in ra thời gian vào và ra của lịch học buổi sáng
tiết 1 bắt đầu vào lúc 6h30 sáng
Code:
#include <iostream.h>
void qd(long t){
int s = t%60;
int m = t/60%60;
int h = t/60/60%24;
Như vậy ta thấy có quy luật :
Hàng i : xuất n-i " ", xuất 1 "*", tiếp tục xuất 2(i-1)-1 " ", rồi xuất 1 "*"
Tuy nhiên hàng 1 và n có chút khác biệt, ta cần thêm điều kiện cho đúng.
Ví dụ in ra tam giác toàn dấu *
Code:
#include "iostream.h"
void main ()
{
int n;
cout<< " n = "; cin>> n;
int i,j;
for (i = 1 ; i <=n ; i++ )
{
for (j = 1 ; j <=n-i ; j++ ) cout<< " ";
cout<< "*";
for (j = 0 ; j < 2*(i-1)-1 ; j++) cout<< "*";
if (i > 1)
cout<< "*";
cout<< endl;
}
}
In ra tam giác không có dấu * ở trong tam giác
Code:
#include "iostream.h"
void main ()
{
int n;
cout<< " n = ";
cin>> n;
3 Tất cả các số chưa bị xoá là số nguyên tố.
Với bài toán của bạn có thể cài đặt giải thuật này như sau:
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
int main()
{
int N;
cout<<"Nhap N: "; cin>>N;
char *a = new char(N+1);
int i, j;
for(i = 2; i <= N/2; i++)
//if(!a[i])
for(j = i+i; j < N; j += i)
a[j] = 1;
for(i = 2; i <= N; i++)
if(!a[i])
cout<<setw(10)<<i;
cout<<endl;
}
Hoặc
#include<iostream.h>
#include<iomanip.h>
//Ham kiểm tra n có phải là số nguyên tố không
int nguyento(int n)
{
if (n<2)
{
return 0;
}
- Nếu d=0 thì N là số nguyên tố.
#include<iostream.h>
#include<iomanip.h>
void main()
{
int n;
cout<<"Nhap N="; cin>>n;
if (n<2)
{
cout<<n<<" khong phai la so nguyen to";
return 0;
}
int d=0;
for(int i=2;i<=int(n/2);i++)
if (n%i==0)
{
d++;
}
if (d==0)
cout<<setw(10)<<n<<" la so nguyen to";
else
cout<<setw(10)<<n<<" KHONG la so nguyen to";
}
Đề bài: Viết chương trình nhập vào số tự nhiên N rồi thông báo lên màn hình số đó có phải là số
nguyên tố hay không.
Phân tích: ta biết số nguyên tố chỉ chia hết cho 1 và chính nó. vậy khi số nguyên N không là số nguyên tố,
thì x là hợp số, tức là N=a.b , và không mất tính tổng quát ta có thể giả sử a<=b. Khi đó max(a) = b, và N =
a . a Vậy ta suy ra giá trị lớn nhất của a là căn bậc 2 của N
Nên ta chỉ cần kiểm tra các số nguyên trong khoản từ 2 đến căn bậc 2 của N, nếu tồn tại 1 giá trị i mà N chia
hết cho i thì kết luận N không phải số nguyên tố, ngược lại thì N là số nguyên tố