Bài tập số học cơ bản - Công nghệ thông tin | Trường đại học Hồng Đức

Bài tập số học cơ bản - Công nghệ thông tin | Trường đại học Hồng Đức được sưu tầm và soạn thảo dưới dạng file PDF để gửi tới các bạn sinh viên cùng tham khảo, ôn tập đầy đủ kiến thức, chuẩn bị cho các buổi học thật tốt. Mời bạn đọc đón xem!

Môn:
Trường:

Đại học Hồng Đức 130 tài liệu

Thông tin:
53 trang 5 tháng trước

Bình luận

Vui lòng đăng nhập hoặc đăng ký để gửi bình luận.

Bài tập số học cơ bản - Công nghệ thông tin | Trường đại học Hồng Đức

Bài tập số học cơ bản - Công nghệ thông tin | Trường đại học Hồng Đức được sưu tầm và soạn thảo dưới dạng file PDF để gửi tới các bạn sinh viên cùng tham khảo, ôn tập đầy đủ kiến thức, chuẩn bị cho các buổi học thật tốt. Mời bạn đọc đón xem!

59 30 lượt tải Tải xuống
BÀI TẬP CƠ BẢN (SỐ HỌC)
BÀI 1: Cho ba số nguyên a, b, c. Hãy tìm số lớn nhất trong ba số trên.
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
int a, b, c;
int main(){
cin>>a>>b>>c;
int kq=max(a,b);
kq=max(kq,c);
cout << "dap an:" << kq;
return 0;
}
Cách 2:
#include <bits/stdc++.h>
using namespace std;
int a, b, c;
int main(){
cin>>a>>b>>c;
if(a==b&&b==c){
cout<<"khong co gia tri max"<<endl;
} else {
int maxx=a;
if( b>maxx){
maxx=b;}
if(c> maxx){
maxx=c;}
cout << "gia tri max:"<< maxx<<endl;
}
return 0;
}
BÀI 2: Tìm số nguyên dương nhỏ nhất sao cho 1+2+3+4+...+n >10000
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
int sum=0;
int main(){
for(int i=1;i<=1000;i++)
{ sum+=i;
if(sum>10000)
{cout<<i;
return 0;
}
}
}
BÀI 3:Tìm ước chung lớn nhất của hai số a và b.
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
int a, b;
long long gcd(long long a,long long b){
if(b==0) return a;
return gcd(b,a%b);
}
int main(){
cin>>a>>b;
cout<<gcd(a,b);
return 0;
}
BÀI 4: Tìm ước chung lớn nhất và bội chung nhỏ nhất của hai số nguyên dương a và b.
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b){
if(b==0) return a;
return gcd(b,a%b);
}
int a, b;
int tich;
int main(){
cin>>a>>b;
tich=a*b;
cout <<"UCLN = " << gcd(a,b)<<endl;
cout<<"BCNN = "<<tich/gcd(a,b)<<endl;
return 0;
}
BÀI 5. Cho số tự nhiên n. Tìm số nguyên nhỏ nhất chia hết cho 1,2,3,4...,n.
Input: - dòng dầu tiên đưa vào T là số lượng bộ test.
- T dòng tiếp theo mỗi dòng đưa vào một bộ test. Mỗi bộ test là một số tự nhiên n.
- T thỏa mãn ràng buộc: 1<=T<=10
4
- Đưa kết quả mỗi test theo từng dòng.
Input Output
2
3
5
6
60
BÀI LÀM
Cachs 1.
#include <bits/stdc++.h>
using namespace std;
int test;
int gcd(int a, int b){
if(b==0) return a;
return gcd(b,a%b);
}
long long bsc(int a,int b){
long long tich=a*b;
if(b==0) return a;
return tich/gcd(a,b);
}
int main(){
cin>>test;
while(test--){
int n;
cin>>n;
long long kq=1;
for(int i=1;i<=n;i++){
kq=bsc(kq,i);
}
cout<<kq<<endl;
}
return 0;
}
Cach 2
#include <bits/stdc++.h>
using namespace std;
int test;
long long bsc(int a,int b)
{ long long tich=a*b;
while(a*b!=0)
{
if(a>b)a%=b;
else b%=a;
}
return tich/(a+b);
}
int main(){
cin>>test;
while(test--){
int n;
cin>>n;
long long kq=1;
for(int i=1;i<=n;i++){
kq=bsc(kq,i);
}
cout<<kq<<endl;
}
return 0;
}
BÀI 6. Cho số nguyên dương n. Tìm n số nguyên tố đầu tiên.
Input Output
5 2 3 5 7 11
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
bool check(int n){
if(n<2) return false;
for(int i=2;i<=sqrt(n);i++){ if(n%i==0) return false; }
return true;
}
int main(){
int n;
cin>>n;
int dem=0, i=2;
while(dem<n){
if(check(i)==true){ cout<<i<<" "; dem++; }
i++;
}
return 0;
}
Cach 2.
#include <bits/stdc++.h>
using namespace std;
bool check(int n){
if(n<2) return false;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0)return false;
}
return true;
}
int main(){
int n;
cin>>n;
int dem=0;
for(int i=2; ;i++)
{
if(check(i)==true){ cout<<i<<" "; dem++;
}
if(dem==n) break;
}
return 0;
}
BÀI 7. Cho bốn số nguyên dương X, Y, Z N. Hãy tìm số nguyên dương nhỏ nhất có N
chữ số chia hết cho đồng thời X, Y, Z.
Input:
- Dòng đầu tiên đưa vào số lượng test T(T<=100).
- Những dòng kế tiếp đưa vào T bộ test. Mỗi bộ test bộ bốn số X, Y, Z, N. Các số
1<=X,Y,Z<=10
5
; N<=18.
Input Output
3
2 3 5 4
4 5 6 3
3 5 7 2
1020
120
-1
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
long long bscnn(long long a, long long b)
{ long long tich=a*b;
while(a*b!=0)
{if(a>b)a%=b;
else b%=a;
}
return tich/(a+b);
}
int main(){
int test; cin>>test;
while(test--)
{
long long x,y,z,n;
cin>>x>>y>>z>>n;
long long res=bscnn(x,y);
res=bscnn(res,z);
long long so_nho_nhat=pow(10,n-1);
if(so_nho_nhat<res) cout<<-1;
else if(so_nho_nhat%res==0)cout<<so_nho_nhat;
else { cout<<(so_nho_nhat/res+1)*res; }
}
cout<<endl;
return 0;
}
BÀI 8. Cho hai số a và b trong đó a<=10 , b<=10 . Tìm ước chung lớn nhất của hai số
12 250
a và b.
Input:
- Dòng đầu tiên đưa vào T là số lượng bộ test.
- T dòng tiếp theo đưa các bộ test. Mỗi bộ test gồm hai dòng: dòng đầu tiên đưa vào số a, dòng
tiếp theo đưa vào số b.
- các số T, a, b thỏa mãn ràng buộc: 1<=T<=100; 1<=a<=10 ; 1<=b<=10
12 250
Output:
-Đưa ra kết quả mỗi test theo từng dòng.
Input Output
1
1221
1234567891011121314151617181920212223242526272829
3
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a,long long b){
if(b==0) return a;
return gcd(b,a%b);
}
int main(){
int test; cin>>test;
while(test--){
long long a;
cin>>a;
cin.ignore();
string b;
cin>>b;
long long tem=0;
for( int i=0; i<b.size(); i++)
{
tem*=10;
tem+=(b[i]-48);
tem%=a;
}
cout << gcd(tem,a);
}
cout<<endl;
return 0;
}
Cachs 2
#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a,long long b){
if(b==0) return a;
return gcd(b,a%b);
}
int main(){
long long a;
cin>>a;
string b;
cin>>b;
long long tem=0;
for( int i=0; i<b.size(); i++){
tem*=10;
tem+=(b[i]-48);
tem%=a;
//cout<<tem<<endl;
}
cout << gcd(tem,a);
return 0;
}
BÀI 9. Nhập vào một số nguyên dương n. Hãy liệt kê các ước của n.
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++)
{
if(n%i==0)cout<<i<<" ";
}
return 0;
}
BÀI 10. Nhập vào một số nguyên dương n. Hãy liệt kê các ước số lẻ của n.
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++)
{
if(n%i==0&&i%2==1) cout<<i<<" ";
}
return 0;
}
BÀI11. Nhập vào một số nguyên dương n. Hãy liệt kê các ước số nguyên tố của n.
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >>n;
for(int i=2;i<=n;i++)
{ while(n%i==0)
{cout<<i<<" ";
n=n/i;
}
}
return 0;
}
BÀI 12. Cho số nguyên dương n. Hãy liệt kê các số nguyên tố trong khoảng từ 1 đến n.
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
bool check(int n)
{
if(n<2)return false;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0) return false;
}
return true;
}
int main(){
int n;
cin >>n;
for(int i=2;i<=n;i++)
if(check(i)==true)
cout <<i <<" ";
return 0;
}
BÀI 13. Cho số nguyên dương n. Hãy liệt kê các số chính phương trong khoảng từ 1 đến n.
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
bool check(int n)
{
int scp=sqrt(n);
if(scp*scp==n)return true;
return false;
}
int main(){
int n;
cin >>n;
for(int i=1;i<=n;i++)
if(check(i)==true)
cout <<i <<" ";
return 0;
}
BÀI22. Cho số nguyên dương n. Kiểm tra xem trong khoảng từ 1 đến n có bao nhiêu số có
3 ước nguyên dương .( Số đó là bình phương của một số nguyên tố).
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
bool check(int n)
{
if(n<2)return false;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0) return false;
}
return true;
}
int main(){
int n;
cin >>n;
int dem =0;
for(int i=2;i<=sqrt(n);i++)
if(check(i)==true) dem++;
cout <<dem;
return 0;
}
BÀI23. Cho số nguyên dương n. Liệt kê xem trong khoảng từ 1 đến n có bao nhiêu số có 3
ước nguyên dương .( Số đó là bình phương của một số nguyên tố).
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
bool check(int n)
{
if(n<2)return false;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0) return false;
}
return true;
}
int main(){
int n;
cin >>n;
for(int i=2;i<=sqrt(n);i++)
if(check(i)==true)
cout <<i*i<<" ";
return 0;
}
BÀI 24. Kiểm tra xem ba độ dài có phải là độ dài ba cạnh của tam giác không? Đó là tam
giác gì?
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
int main(){
double a, b, c;
cin>>a>>b>>c;
if(a+b>c&&b+c>a&&a+c>b){
if(a==b&&a==c) cout<<"tam giac la tam giac deu";
else if(a==b||a==c||b==c) cout<<"tam giac la tam giac can";
else if(a*a+b*b==c*c||a*a+c*c==b*b||c*c+b*b==a*a) cout<<"la tam giac vuong";
else cout<<"la tam giac thuong";
}
else cout <<"day khong phai la do dai cua tam giac";
return 0;
}
BÀI 36. Nhập vào một số tự nhiên N. Hãy in ra số đảo ngược lại của số N.( bỏ số 0 trước
nếu có).
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
long long n;
long long res;
int a;
int main(){
cin>>n;
res=0;
while (n!=0) {
a=n%10;
res= res*10+a;
n=n/10;
}
cout<<res;
return 0;
}
BÀI 42: Cho hai số nguyên dương a, b thỏa mãn 2<a<b<100. Hãy đưa ra các cặp số
nguyên tố cùng nhau trong khoảng (a,b).
Input Output
3 5 34
35
45
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
int ucln(int a, int b){
if(b==0)
return a;
return ucln(b, a%b);
}
int main(){
int a, b;
cin>>a>>b;
for(int i=a;i<b;i++){
for(int j=i+1;j<=b;j++){
if(ucln(i,j)==1){
cout<<i<<" "<<j<<endl;
}
}
}
return 0;
}
BÀI 43. Kiểm tra xem hai số nguyên dương có phải là hai số nguyên tố cùng nhau không.
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
int a, b;
int ucln(int a,int b){
while(a*b!=0){
if(a>b)a=a%b;
else b=b%a;
}
return a+b;
}
int main(){
cin>>a>>b;
if (ucln(a,b)==1)
cout<<"la hai so nguyen to cung nhau";
else cout<<"khong phai la hai so nguyen to cung nhau";
return 0;
}
BÀI 44: Cho hai số nguyên dương a, b thỏa mãn 2<a<b<100. Hãy đưa ra các cặp số
nguyên tố cùng nhau trong khoảng (a,b).
Input Output
3 5 3,4
3,5
4,5
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
int a, b;
int ucln(int a,int b){
while(a*b!=0){
if(a>b)a=a%b;
else b=b%a;
}
return a+b;
}
int main(){
cin>>a>>b;
for(int i=a;i<b;i++)
for(int j=i+1;j<=b;j++)
if (ucln(i,j)==1)
cout<<i<<","<<j<<endl;
return 0;
}
BÀI 45. Cho số nguyên dương n. Hãy liệt kê các cặp số nguyên tố có tổng bằng n.
- Dòng đầu tiên vơi T bộ test
- Dòng thứ hai trở đi là T số tự nhiên n.
Input Output
2
10
20
2
10
3,7
5,5
20
3,17
7,13
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
bool check(int n)
{
if(n<2)return false;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0) return false;
}
return true;
}
int main(){
int test; cin>>test;
while(test--){
int n;
cin>>n;
for(int i=1;i<=n/2;i++)
if(check(i)==true&&check(n-i)==true) cout <<i<<","<<n-i<<endl;
}
cout<<endl;
return 0;
}
BÀI 46. Cho số nguyên dương n. Hãy liệt kê các số nguyên dương nhỏ hơn n và nguyên t
cùng nhau với n.
Input Output
10 1 3 7 9
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
int a, b, n;
int ucln(int a,int b){
while(a*b!=0){
if(a>b)a=a%b;
else b=b%a;
}
return a+b;
}
int main(){
cin>>n;
for(int i=1;i<n;i++)
if (ucln(i,n)==1)
cout<<i<<" ";
return 0;
}
BÀI 46. Cho số nguyên dương n. Hãy đếm các số nguyên dương nhỏ hơn nnguyên tố
cùng nhau với n.
Input Output
10 4
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
int a, b, n;
int dem=0;
int ucln(int a,int b){
while(a*b!=0){
if(a>b)a=a%b;
else b=b%a;
}
return a+b;
}
int main(){
cin>>n;
for(int i=1;i<n;i++)
if (ucln(i,n)==1) dem++;
cout<<dem;
return 0;
}
Bài 47. Hai số gọi là số đẹp nếu chúng đều là số nguyên tố và hơn kém nhau k đơn vị. Cho
số nguyên dương n. Hãy liệt kê các cặp số đẹp từ 1 đến n.( k<=n)
Input Output
20 4 3,7
7,11
13,17
Ví dụ: n = 20 , k = 4
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
bool check(int n)
{
if(n<2)return false;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0) return false;
}
return true;
}
int main(){
int n, k;
cin>>n;
cin>>k;
for(int i=1;i<=n;i++)
if(check(i)==true&&check(i+k)==true&&i+k<=n) cout <<i<<","<<i+k<<endl;
return 0;
}
Bài 48. Hai số gọi là số đẹp nếu chúng đều là số nguyên tố và hơn kém nhau k đơn vị. Cho
số nguyên dương n. Hãy đếm các cặp số đẹp từ 1 đến n.
Input Output
20 4 3
Ví dụ: n = 20 , k = 4
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
bool check(int n)
{
if(n<2)return false;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0) return false;
}
return true;
}
int main(){
int n, k, dem=0;
cin>>n;
cin>>k;
for(int i=1;i<=n;i++)
if(check(i)==true&&check(i+k)==true&&i+k<=n) dem++;
cout <<dem;
return 0;
}
BÀI 54. k số nguyên tố. Số nguyên tố an toàn nếu 2k+1 củng số nguyên tố. Cho số
nguyên dương n. Hãy tìm các cặp số nguyên tố thỏa mãn đồng thời là số nguyên tố số
nguyên tố an toàn nhỏ hơn hoặc bằng n.
BÀI LÀM
Input Output
100 2 ,5
3 ,7
5 ,11
11 ,23
23 ,47
29 ,59
41 ,83
#include <bits/stdc++.h>
using namespace std;
bool check(int n)
{
if(n<2)return false;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0) return false;
}
return true;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++)
if(check(i)==true&&check(2*i+1)==true&&2*i+1<=n) cout<<i<<" ,"<<2*i+1<<endl;
return 0;
}
BÀI 55. k số nguyên tố. Số nguyên tố an toàn nếu 2k+1 củng số nguyên tố. Cho số
nguyên dương n. Hãy tìm các số nguyên tố an toàn nhỏ hơn hoặc bằng n.
Input Output
100 5 7 11 23 47 59 83
BAI LAM
#include <bits/stdc++.h>
using namespace std;
bool check(int n)
{
if(n<2)return false;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0) return false;
}
return true;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++)
if(check(i)==true&&check(2*i+1)==true&&2*i+1<=n) cout<<2*i+1<<" ";
return 0;
}
BÀI 56. Cho cặp số nguyên dương a, b.(a và b<= 10 )hãy tìm số lượng ước chung của hai
12
số a và b.(Đó chính là số lượng ước của ước chung lớn nhất của a và b.)
Input Output
4 5
72 180
1
9
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
long long a, b,m;
int dem=0;
long long ucln(long long a,long long b){
while(a*b!=0){
if(a>b)a=a%b;
else b=b%a;
}
return a+b;
}
int main(){
cin>>a>>b;
m=ucln(a,b);
for(long long i=1;i<=m;i++)
if (m%i==0) dem++;
cout<<dem;
return 0;
}
BÀI 57. Cho số nguyên dương n. (n<= 10 ). Hãy đưa ra chữ số lớn nhất của n.
12
Input Output
6
334988
6
9
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
long long n;
long long m=0;
long long a;
int main(){
cin>>n;
while(n!=0){
a=n%10;
n=n/10;
if(m<=a) m=a;
}
cout<<m;
return 0;
}
Cách 2:
#include <bits/stdc++.h>
using namespace std;
int n;
string a;
int main()
{
//freopen ("Bai2.inp","r",stdin);
//freopen ("bai2.out","w",stdout);
cin >> n;
a="1";
string s=to_string (n);
for (int i=1;i<s.size();i++){
if (s.substr(i,1)>a)
a=s.substr(i,1);
}
int max=stoi(a);
cout << max;
return 0;
}
BÀI 58. Cho số nguyên dương n. Hãy đếm xem n bao nhiêu chữ số tổng các chữ số
của n.
Input Output
12345 5 15
123456 6 21
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
long long n;
long long res;
long long dem=0;
int a;
int main(){
cin>>n;
res=0;
while (n!=0) {
a=n%10;
res= res+a;
n=n/10;
dem++;
}
cout<<dem<<" "<<res;
return 0;
}
BÀI 59. Cho số n nguyên dương. Hãy in ra số lớn nhất trong các chữ số của n.
Ví dụ: 256790 in ra 976520
BÀI LÀM
#include<bits/stdc++.h>
using namespace std;
int i,j;
string s;
int main()
{
//freopen("doichuso.inp","r",stdin);
//freopen("doichuso.out","w",stdout);
cin>>s;
for(i=0;i<s.size(); i++)
{
char Max=s[s.size()-1];
int vt=s.size()-1;
for(j=s.size()-1;j>i;j--)
{
if(Max<s[j])
{
Max=s[j];
vt=j;
}
if(Max>s[i])
{
swap(s[i],s[vt]);
}
}
}
cout<<s;
}
BÀI 60. Cho n số nguyên . Hãy đưa ra số lượng của dãy con tổng các phần tử lớn hơn
hoặc bàng S. Hãy đưa ra Độ dài của dãy con liên tiếp ngắn nhất tổng lớn hơn hoặc
bằng S.(bài 4 Thọ Xuân)(dãy con liên tiếp và lồng nhau )
Input Output
12 30
5 1 3 5 10 7 4 9 2 8 11 5
4
BÀI LÀM
#include <bits/stdc++.h>
long long sum=0;
int res,N,L=1,i,R,S,a[100005];
using namespace std;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
//freopen("BAI4.INP","r",stdin);
//freopen("BAI4.OUT","w",stdout);
cin>>N; cin>>S;
for (i=1 ; i<=N; i++) cin>>a[i];
res=N+1; // N+1 vuot qua so pt cua day da cho (khong co day con thỏa man)
for (R=1; R<=N; R++) {
sum+=a[R]; // tinh tong day de tim sum
while (sum>=S){// tim duoc tong day con thoa man
res=min(res, R-L+1); // ghi nhan so phan tu cua day con
sum-=a[L]; L++; // di tim day con ngan hon
}
}
if (res==N+1) cout<<"-1"; // khong co day con nao
else cout<<res; // co day con (ngan nhat)
return 0;
}
BÀI 61. Nhập vào một số nguyên n. Hãy đưa ra ước số nguyên tố lớn nhất của n.
Input Output
100
79
5
7
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
int res;
int main(){
int n;
cin >>n;
for(int i=2;i<=n;i++)
{ while(n%i==0)
{if(res<=i)res=i;
n=n/i;
}
}
cout<<res;
return 0;
}
BÀI 65. Ước thực sự của số tự nhiên N ước nguyên dương khác 1 chính nó. Hai số
được gọi là anh em nếu chúng có tổng các ước thực sự bằng nhau.
dụ: 6 và 25 được gọi hai số anh em các ước thực sự của 6 2 3 có tổng bằng 5
các ước thực sự của 25 là 5 có tổng là 5.
Yêu cầu: Viết chương trình để kiểm tra hai số có phải là hai số anh em không?
Dữ liệu vàotừ file văn bản BAI1.INP: Chỉ gồm một dòng duy nhất chứa hai số nguyên dương
M, N (0 < M, N < 10 ) cách nhau ít nhất một ký tự trống.
4
Kết quảghi file văn bản BAI1.OUT: Chỉ một dòng duy nhất chứa xâu ‘YES’ nếu M, N là hai số
anh em, ngược lại ghi ra xâu ‘NO’.
Ví dụ:
BAI1.INP BAI1.OUT BAI1.INP BAI1.OUT
6 25
49 10
YES
YES
12 13 NO
BÀI LÀM
#include <bits/stdc++.h>
using namespace std;
int check (int n){
int dem=0;
for(int i=2;i<n;i++)
{
if(n%i==0){if(i!=n/i) dem=(dem++)+(dem++);
else dem++;
}
return dem;
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
freopen("bai60.inp","r", stdin);
freopen("bai60.out","w", stdout);
int n, m;
cin>>n>>m;
if(check(n)==check(m))cout <<"yes";
else cout<<"no";
return 0;
}
BÀI 66. Cho một dãy a gồm n số nguyên dương. Hãy cho biết bao nhiêu cặp số a +a
i j
chia hết cho 3. Với 1<=i<j<=n. 1<=n<=10 và 1<=a
5
i
<=10
5
Input Output
4
3 6 9 12
3,6
3,9
3,12
6,9
6,12
9,12
BÀI LÀM
#include<bits/stdc++.h>
using namespace std;
long long n,a[100005];
int main(){
cin>>n;
for (int i= 1; i<= n; i++)
cin>>a[i];
for (int i=1; i< n; i++)
for (int j= i+1; j<= n; j++){
if((a[i]+a[j])%3==0) cout <<a[i]<<","<<a[j]<<endl;
}
cout<<endl;
}
Bài 75. Kiểm tra xem một số có phải là số đối xứng không
BAI5.INP BAI5.OUT
12321
123345
12321
0
#include<bits/stdc++.h>
using namespace std;
bool kimtradoixung(int n){
int m=0;
int tam=n;
while (n>0) {
int a;
a=n%10;
n=n/10;
m= m*10+a;
}
if(m==tam) return true;
return false ;
}
int main(){
int n;
cin>>n;
if(kimtradoixung(n)==true) cout<<n;
else cout<<0;
return 0;
}
Bài 89. Tìm số nguyên tố nhỏ nhất lớn hơn số n cho trước.
BAI5.INP BAI5.OUT
9
(20)
9
(23)
Bài làm
#include <bits/stdc++.h>
using namespace std;
int nguyenTo(int n) {
if (n < 2) return 0;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) return 0;
}
return 1;
}
int main() {
int n;
cin >> n;
int x = n + 1;
while (!nguyenTo(x)) x++;
cout << x;
return 0;
}
Bài 91. SốP là nếu P nguyên tố và P = 2 – 1, mà n cũng là số nguyên tố.
số Mersenne
n
a) Kiểm tra P có là số Mersenne hay không? Nếu có ghi ra 1 ngược lại ghi 0.
b) Tìm các số Mersenne nhỏ hơn hoặc bằng n.
c) Tìm các số Mersenne nằm trên đoạn [m, n].
BAI5.INP BAI5.OUT
11 127 1
3 7 31 127
31 127
Bài làm
#include <bits/stdc++.h>
using namespace std;
int nguyenTo(int n) {
if (n < 2) return 0;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) return 0;
}
return 1;
}
int Mersenne(int n){
int i = 0;
n += 1;
while (n > pow(2, i)) {
i++;
}
if (n == pow(2, i))
return 1;
else return 0;
}
int main() {
int m, n;
cin >> m >> n;
if (nguyenTo(n) && Mersenne(n))
cout << 1 << endl;
else cout << 0 << endl;
for (int i = 2; i <= n; i++) {
if (nguyenTo(i) && Mersenne(i))
cout << i << " ";
}
cout << endl;
for (int i = m; i <= n; i++) {
if (nguyenTo(i) && Mersenne(i))
cout << i << " ";
}
return 0;
}
Bài 92. Con ốc sên. Con ốc sên đang ở gốc một cái cây cao v mét tính từ gốc. Ốc sên muốn
bò lên ngọn cây để ăn những lá non trên đó. Ban ngày ốc sên bò được a mét lên trên, nhưng ban
đêm khi ngủ nó bị trôi xuống b mét.
Yêu cầu: Cho các số nguyên a, b, v (1 <= b < a <= v <= 10 ). Hãy xác định số ngày cần thiết
9
để ốc sên lên tới ngọn cây. Ví dụ:
BAI5.INP BAI5.OUT
2 1 5 4
Bai lam
#include <bits/stdc++.h>
using namespace std;
int main (){
long long a, b, v;
cin >> a>> b >> v;
if (a==v) cout << 1;
else
{
if ((v-b)%(a-b)==0)
cout<<(v-b)/(a-b);
else cout<<(v-b)/(a-b)+1;
}
return 0;
}
Bài 93. Tìm một số nguyên dương k nhỏ nhất sao cho tích các chữ số của k bằng n (k, n là
2 số nguyên dương).
BAI5.INP BAI5.OUT
72 89 ( 8.9 = 72)
Bài làm
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, a = 0;
cin >> n;
for(int i = 9; i > 1; i--) {
while(n % i == 0 && n > 1) {
a = a*10 + i;
n = n/i;
}
}
int b = 0;
while(a > 0){
int tmp = a % 10;
b = b * 10 + tmp;
a = a / 10;
}
if(n > 1)
cout << -1;
else
cout << b;
return 0;
}
Bài 94. Số Palidrome số đối xứng, nghĩa là đọc từ trái sang phải hay từ phải sang trái
ta đều được 1 số. Ví dụ: 11, 121, 1331, …. Nhập 2 số nguyên dương m, n. Liệt kê dãy số vừa là
số nguyên tố vừa là số Palidrome trong đoạn [m, n].
BAI5.INP BAI5.OUT
100 200 101 131 151 181 191
Bài làm
#include <bits/stdc++.h>
using namespace std;
int palidrom(int n) {
int x = n;
int d = 0;
while (n > 0) {
d = d*10 + n%10;
n /= 10;
}
if (x == d) return 1;
else return 0;
}
int nguyenTo(int n) {
if (n < 2) return 0;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) return 0;
}
return 1;
}
int main () {
long m, n;
cin >> m >> n;
for (int i = m; i <= n; i++) {
if (palidrom(i) && nguyenTo(i))
cout << i << " ";
}
return 0;
}
Bài 115. Tìm ước nguyên tố lớn nhất của số n. (độ phức tạp là log(n))
Bài Làm
#include <bits/stdc++.h>
using namespace std;
int solve(int n){
int res;
for(int i=2; i<=sqrt(n);i++){
while(n%i==0){
res=i;
n/=i;
}
}
if(n!=1)
res=n;
return res;
}
int main(){
int n;
cin >>n;
cout<< solve(n);
return 0;
}
Bài 12. Viết chương trình nhập vào tư 2 đến n số nguyên tố đầu tiên.
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cout<<"Nhap mot so bat ky: ";
cin>>n;
if (n<2)
{
cout<<"Khong ton tai bat ky so nguyen to nao!" << endl;
}
else if (n==2)
{
cout<<"Danh sach cac so nguyen to tu 0 den 2 la: 2 " << endl;
}
else if (n>2)
{
cout<<"Danh sach cac so nguyen to tu 0 den " << n << " la: " << endl;
cout<<2<<endl;
cout<<3<<endl;
for (int i=5; i<=n; i++)
for (int j=2; j*j<=i; j++)
{
if (i % j == 0)
break;
else if (j+1 > sqrt(i))
{
cout << i << endl;
}
}
}
return 0;
}
Bài 14. Kiểm tra một số phải là số hoàn hảo. Số hoàn hào cố có tổng các ước của
bằng chính nó. 28 = 1 2 4 7, 14
#include <bits/stdc++.h>
using namespace std;
bool istuc(int x){
int s = 0;
for (int i = 1; i < x; i++){
if (x%i == 0) s += i;
}
if (s==x) return true;
else return false;
};
int main()
{
int n;
cout <<"Nhap n: ";
cin >> n;
if (istuc(n)==true)
cout <<n<< " la so hoan hao";
else
cout <<n<< " khong phai la so hoan hao";
cout << endl;
return 0;
}
Bài 27. Tìm số chính phương trong đoạn từ x dến y (kể cả x và y).
(1<=x<=y<=10 ). In ra kết quả số lượng số chính phương
9
BAI4.INP BAI4.OUT
2 10
7 1234567890
25 100
2
35134
6
Cách 1.
#include <bits/stdc++.h>
using namespace std;
long long X, Y;
int d=0;
int main(){
cin>>X>>Y;
for(int i=(int)sqrt(X); i<=(int)sqrt(Y)+1; i++)
if(((i*i)>=X)&&((i*i)<=Y)) d++;
cout<<d;
return 0;
}
Cách 2.
#include <bits/stdc++.h>
using namespace std;
long long X, Y;
int main(){
cin>>X>>Y;
int x=(int)sqrt(X);
int y=(int)sqrt(Y);
if(x*x==X) cout<<(y-x)+1;
else cout<<(y-x);
return 0;
}
Bài 29. Tính tổng n số chính phương đầu tiên. Kết quả đưa ra phần chia cho 2021.
Với
n<= 10 . ví dụ T= 1+4+9+16 =30.
10
T=1+4+9+16+....+400= 2870. Số cần đưa ra là 2870 mod 2021= 849
BAI4.INP BAI4.OUT
4
20
30
849
Bài làm
Cách 1. ( thường bị quá thời gian nên không ăn hết các test)
#include<bits/stdc++.h>
using namespace std;
int n;
long long sum=0;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
sum+=i*i;
}
cout<<sum%2021;
return 0;
}
Cách 2. Công thức tính tổng bình phương của n số nguyên đầu tiên là:
n
(
n+1
)
( )2n+1
6
K=1/6%2021
K*6
1(mod 2021) k*6 chia cho 2021 dư 1
K*6= 2021+1 suy ra k= 337
#include<bits/stdc++.h>
using namespace std;
long long n;
int main(){
cin>>n;
cout<<((n%2021)*((n+1)%2021)*((2*n+1)%2021)*337)%2021;
return 0;
}
Bài 31. Cho trước hai số nguyên dương m, n (m< n). Xác định tam giác vuông có diện tích
lớn nhất với các cạnh a, b, c là các số dương thỏa mãn: m<a+ b+ c<=n.
- dữ liệu vào gồm 1 dòng chưa hai số m, n cách nhau một dấu cách với 3<=m<n<10000.
- dữ liệu ra chứa một số nguyên duy nhất là diện tích của tam giác tìm được( định dạng 1 chữa
số thập phân). Nếu không tìm được tam giác vuông thỏa mãn thì ghi số 0.0
BAI29.INP BAI29.OUT
3 20
15 20
6.0 (vì tam giác vuông có 3cạnh là 3, 4, 5)
0.0 (vì không tìm thấy tam giác vuông
nào thảo mãn)
#include <bits/stdc++.h>
using namespace std;
bool check(int a, int b, int c){
if(a*a + b*b == c*c|| a*a + c*c == b*b || b*b + c*c == a*a)
return true;
else return false;
}
int main(){
int m, n;
double kq, maxx=0;
cin>>m>>n;
for(int i=m; i<=n/2; i++ ){
for(int j=i+1; j<=n/2; j++){
for(int k=j+1; k<=n/2;k++){
if(check(i,j,k)==true &&(i+j+k)>m &&(i+j+k)<=n&&(i+j)>k){
cout<<i<<" "<<j<<" "<<k<<" "<<endl;
kq= i*j*1.0/2;
if(maxx<=kq) maxx=kq;
}
}
}
}
cout << fixed<<setprecision(1)<<maxx << endl;
return 0;
}
Bài 35. Một số nguyên gọi là không chứa chính phương nếu không chia hết cho bất kỳ
số
nguyên nào dạng x với x>1.
2
Yêu cầu: cho số nguyên n (1<=n<=10 ). Hãy tìm ước lớn nhất không chưa chính phương của
13
n.
BAI4.INP BAI4.OUT
9
20
121
3
10( 20 không là ước lớn nhất vì 12=2 .5)
2
11
Giải thích: n=2 .3 .5 thì ước lớn nhất không chưa chính phương là 2.3.5
i j k
Bài làm
#include <bits/stdc++.h>
using namespace std;
long long n, ans=1;
int main(){
cin>>n;
for(long long i=2; i*i<=n; i++){
if(n%i==0) ans*=i;
while(n%i==0) n/=i;
}
if(n>1) ans*=n;
cout << ans<< endl;
return 0;
}
Bài 36. Cho số nguyên dương n. (1<=n<=10 ). Hãy xác định số lượng ước của n.
14
BAI4.INP BAI4.OUT
9
20
4
3
6
3
Ta chỉ cần tìm ước đến sqrt(n) = i*i.
Bài làm
#include <bits/stdc++.h>
using namespace std;
long long n;
int dem=0;
int main(){
cin>>n;
for(long long i=1; i*i<=n; i++){
if(n%i==0){
dem++;
if(i!=n/i) dem++;
}
}
cout << dem;
return 0;
}
Bài 40. Số thứ n. Người ta viết liên tục, sát nhau các số 3, 6, 9, 12, 15, …, 2010, 2013 được
một sốsau: A= 3691215…20102013. Hãy tìm chữ số thứ
n
của số A.
Yêu cầu: Nhập từ bàn phím số nguyên
n
1 2000n
. Đưa ra kết quả màn hình chữ số thứ
n
(từ trái qua phải) của số A.
Ví dụ:
Nhập vào số n Kết quả màn hình
3 Chu so thu 3 la : 9
7 Chu so thu 7 la : 5
Bài làm
#include <bits/stdc++.h>
using namespace std;
string st;
int n;
int main(){
cin>>n;
st=" ";
for(int i=1; i<=n ; i++){
st=st + to_string(3*i);
}
cout << st[n] << endl;
return 0;
}
Cách 2.
#include <bits/stdc++.h>
using namespace std;
string st;
int n, k;
int main(){
cin>>n;
st=" ";
for(int i=1; i<=n ; i++){
st=st + to_string(3*i);
k=(int(st[n])-48);
}
cout << k;
return 0;
}
Bai 41. Cho hai số nguyên dương a và b. Tìm số nguyên dương k (a<=k <b) để tổng chênh
lệch giữa các số nguyên liên liếp từ a đến k và tổng các số nguyên liên tiếp từ k+1 đến b là nhỏ
nhất.( a<b<=10 )
9
BAI1.INP BAI1.OUT
2 7 5 ( tổng từ 2 đến 5 là :14
Tổng từ 6 đến 7 là : 13
Chênh lệch: 1)
Bài làm
#include <bits/stdc++.h>
#define ll long long
using namespace std;
long long d = 1e18;
long long sum(int m, int n){
return (m*1ll + n*1ll)*(n*1ll - m*1ll + 1)/2;
//tinh tong tu m den n va ép kiẻu 1ll
}
int a, b, ans;
int main(){
cin>>a>>b;
int L=a, R=b;
while(L<=R){
int mid= (L+R)/2;
long long sumt= sum(a,mid);
long long sump= sum(mid+1, b);
if(d > abs(sumt- sump)){
d = abs(sumt -sump);
ans = mid;
}
if(sumt<sump) L=mid+1;
else R = mid -1;
}
cout << ans << endl;
return 0;
}
Bài 43. Sàng số nguyên tố. Kiểm tra số phải số nguyên tố với nhiều test. Nếu số
nguyên tố thì đưa ra yes. Không phải là số nguyên tố đưa ra no. Bộ test t<=100 và n<=10
6
BAI1.INP BAI1.OUT
5
23
125
101
246
1567
yes
no
yes
no
yes
Bài làm
#include <bits/stdc++.h>
using namespace std;
int prime[1000001];
void sang(){
for(int i=0; i<=1000000; i++)
prime[i]=1;
prime[0]=prime[1]=0;
for(int i=2; i<=1000; i++){
if(prime[i]){
for(int j=i*i; j<=1000000; j+=i)
prime[j]=0;
}
}
}
int main(){
sang();
int t;
cin>>t;
while(t--){
int n; cin>>n;
if( prime[n]) cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
return 0;
}
Bài 44. Viết chương trình đếm xem trong đoạn [a,b] bao nhiêu số nguyên tố tất cả
các chữ số của số nguyên tố đó cũng số nguyên tố. Với mỗi bộ test ghi hai số a, b.
1<a<b<10
6
,1<=test<=100. n<=10
6
BAI1.INP BAI1.OUT
2
10 100
1234 5678
4
26
Bài làm
#include <bits/stdc++.h>
using namespace std;
int prime[1000001];
void sang(){
for(int i=0; i<=1000000; i++)
prime[i]=1;
prime[0]=prime[1]=0;
for(int i=2; i<=1000; i++){
if(prime[i]){
for(int j=i*i; j<=1000000; j+=i)
prime[j]=0;
}
}
}
int tachso(int n){
while(n){
int r=n%10;
if(r!=2&&r!=3&&r!=5&&r!=7) return 0;
n/=10;
}
return 1;
}
int main(){
sang(); int t; cin>>t;
while(t--){
int a, b; cin>>a>>b;
int dem=0;
for(int i=a; i<=b; i++){
if( prime[i]&& tachso(i)) dem++;
}
cout<<dem<<endl;
}
return 0;
}
Bài 44. Viết chương trình đưa ra trong đoạn [a,b] có bao nhiêu số nguyên tố và tổng tất cả
các chữ số của số nguyên tố đó cũng số nguyên tố. Với mỗi bộ test ghi hai số a, b.
1<a<b<10
6
,1<=test<=100. n<=10
6
BAI1.INP BAI1.OUT
2
10 100
50 90
11 23 29 41 43 47 61 67 83 89
61 67 83 89
Bài làm
#include <bits/stdc++.h>
using namespace std;
int prime[1000001];
void sang(){
for(int i=0; i<=1000000; i++)
prime[i]=1;
prime[0]=prime[1]=0;
for(int i=2; i<=1000; i++){
if(prime[i]){
for(int j=i*i; j<=1000000; j+=i)
prime[j]=0;
}
}
}
int tongso(int n){
int sum=0;
while(n>0){
sum+=n%10;
n/=10;
}
return sum;
}
int main(){
sang(); int t; cin>>t;
while(t--){
int a, b; cin>>a>>b;
int dem=0;
for(int i=a; i<=b; i++){
if( prime[i]&&prime[tongso(i)]) cout<<i<<" ";
}
cout<<endl;
}
return 0;
}
Bài 44. Viết chương trình đưa ra trong đoạn [a,b] bao nhiêu số nguyên tố số đảo
ngược của số nguyên tố đó cũng số nguyên tố. Với mỗi bộ test ghi hai số a, b.
1<a<b<10
6
,1<=test<=100. n<=10
6
BAI1.INP BAI1.OUT
2
10 100
50 90
11 13 17 31 37 71 73 79 97
71 73 79
Bài làm
#include <bits/stdc++.h>
using namespace std;
int prime[1000001];
void sang(){
for(int i=0; i<=1000000; i++)
prime[i]=1;
prime[0]=prime[1]=0;
for(int i=2; i<=1000; i++){
if(prime[i]){
for(int j=i*i; j<=1000000; j+=i)
prime[j]=0;
}
}
}
int daoso(int n){
int dao=0;
while(n>0){
dao=dao*10 + n%10;
n/=10;
}
return dao;
}
int main(){
sang(); int t; cin>>t;
while(t--){
int a, b; cin>>a>>b;
int dem=0;
for(int i=a; i<=b; i++){
if( prime[i]&&prime[daoso(i)]) cout<<i<<" ";
}
cout<<endl;
}
return 0;
}
Bài 45. Úng dụng sàng số nguyên tố. Nhập vào số nguyên n. Hãy in ra các ước nguyên tố
bé nhất của các số từ 1 đến n. 1<=n<10
7
BAI1.INP BAI1.OUT
20 1 2 3 2 5 2 7 2 3 2 11 2 13 2 3 2 17 2 19 2
Bài làm
#include <bits/stdc++.h>
using namespace std;
int prime[10000001], n;
void sang(){
for(int i=0;i<=10000000;i++){
prime[i]=i;
}
for(int i=2;i<=sqrt(10000000); i++){
if(prime[i]==i){
for(int j=i*i; j<=10000000; j+=i){
if(prime[j]==j) prime[j]=i;
}
}
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
//freopen("BAI604.INP","r", stdin);
//freopen("BAI604.OUT","w", stdout);
sang();
cin>>n;
for(int i=1; i<=n; i++)
cout<<prime[i] <<" ";
return 0;
}
Bài 46. Cho số nguyên dương n. Hãy tính tổng các bình phương các chữ số của n.
0<n<=2.10
9
BAI1.INP BAI1.OUT
125 30. vì 30= 1 +2 +5
2 2 2
Bài làm
#include <bits/stdc++.h>
using namespace std;
int n, ans=0;
int main(){
cin>>n;
while(n>0){
int r = n%10;
ans += r*r;
n /= 10;
}
cout << ans << endl;
return 0;
}
Bài 47. Cho đa thức có dạng P(x) = a x +a x +a x +.....+a x +a
n
n
n-1
n-1
n-2
n-2
1 0
n là số nguyên dương, a và x là các số nguyên. 1<=n<=10 và |x|<=20 và
i
|a
i
|<=1000. Hãy lập trình tính giá trị của P(x).
BAI1.INP BAI1.OUT
3 2 (n=3, x=2)
1 2 1 2 ( các ai)
20
Bai lam
#include <bits/stdc++.h>
using namespace std;
long long luythua(int x, int n){
long long res = 1;
for(int i=1; i<=n; i++) res *= x;
return res;
}
int main(){
int n, x;
cin>>n>>x;
long long ans=0;
long long a;
for(int i=n; i>=0; i--){
cin>>a;
ans += a*luythua(x, i);
}
cout << ans << endl;
return 0;
}
Bài 49. Một số tự nhiên được gọi là số siêu nguyên tố nếu bản thân nó là một số nguyên tố
tất cả cac số thu được bằng cách xóa lần lượt các chữ số bên phải của đều số nguyên
tố. Ví dụ số 7331 là số siêu nguyên tố vì 7331, 733,73, 7 là những số nguyên tố.
Viết chương trình kiểm tra mỗi số có là số siêu nguyên tố thì in ra “yes”. Ngược lại in ra “ no”.
Với t là số lượng bộ test. 1<=t<=100.
BAI1.INP BAI1.OUT
6
23
29
37
7331
313
45
yes
yes
yes
yes
yes
no
Bai lam
#include <bits/stdc++.h>
using namespace std;
int prime[1000001];
void sang(){
for(int i=0; i<=1000000; i++)
prime[i]=1;
prime[0]=prime[1]=0;
for(int i=2; i<=1000; i++){
if(prime[i]){
for(int j=i*i; j<=1000000; j+=i)
prime[j]=0;
}
}
}
int tachso(int n){
n /=10;
while(n>0){
if(prime[n]==0) return 0;
n/=10;
}
return 1;
}
int main(){
sang(); int t; cin>>t;
while(t--){
int n; cin>>n;
if( prime[n]&& tachso(n)) cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
return 0;
}
Bai 51. Một số nguyên n được gọi số đẹp nếu tồn tại ít nhất một số nguyên tố x sao cho
n
chia hết cho x và n chia hết cho x . ví dụ 48 là số đẹp vì x=2số nguyên tố mà 48 chia hết
3
cho 2 cả 2 . cho số nguyên dương n, hãy kiểm tra xem n phải số đẹp hay không.
3
1<=n<= 10
16
BAI1.INP BAI1.OUT
125
12
928
Yes
No
Yes
Bài làm
#include <bits/stdc++.h>
using namespace std;
bool check(long long n){
for(int i=2; i<=sqrt(n); i++){
if(n%i==0){
int mu = 0;
while(n%i==0){
++mu;
n/=i;
}
if(mu>=3) return true;
}
}
return false;
}
int main(){
long long n;
cin>>n;
if(check(n)) cout<<"yes"<<endl;
else cout<<"no"<<endl;
return 0;
}
Bài 63. Phân tích số n thành các thừa số nguyên tố.
BAI1.INP BAI1.OUT
12
28
223
227
Bài làm
Dạng 1.
#include <bits/stdc++.h>
using namespace std;
void phantich(int n){
for(int i=2;i<=sqrt(n); i++){
while(n%i==0){
cout<<i;
n/=i;
}
}
if(n!=1) cout<<n;
}
int main(){
int n;
cin>>n;
phantich(n);
return 0;
}
Dạng 2. Khuyết số mũ
BAI1.INP BAI1.OUT
12
28
16
23
27
2
Bài làm
#include <bits/stdc++.h>
using namespace std;
void phantich(int n){
for(int i=2;i<=sqrt(n); i++){
if(n%i==0){
cout<<i;
while(n%i==0){
n/=i;
}
}
}
if(n!=1) cout<<n;
}
int main(){
int n;
cin>>n;
phantich(n);
return 0;
}
Cach 2.
BAI1.INP BAI1.OUT
108 2
3
1125 3
5
#include <bits/stdc++.h>
using namespace std;
long long a;
int main(){
cin>>a;
for(int i=2;i<=sqrt(a);i++){
if(a%i==0){
cout<<i<<endl;
while(a%i==0)
a=a/i;
}
}
if(a>1){
cout<<a<<endl;
}
return 0;
}
Dạng 3. số mũ
BAI1.INP BAI1.OUT
12 2 2
3 1
56 2 3
7 1
#include <bits/stdc++.h>
using namespace std;
void phantich(int n){
for(int i=2;i<=sqrt(n); i++){
if(n%i==0){
int mu=0;
while(n%i==0){
mu++;
n/=i;
}
cout<<i<<" "<<mu<<endl;
}
}
if(n!=1) cout<<n<<" "<<"1";
}
int main(){
int n;
cin>>n;
phantich(n);
return 0;
}
Dạng 4. Nhân
BAI1.INP BAI1.OUT
12 2*2*3
28 2*2*7
56 2*2*2*7
#include <bits/stdc++.h>
using namespace std;
void phantich(int n){
for(int i=2;i<=sqrt(n); i++){
while(n%i==0){
cout<<i;
n/=i;
if(n!=1) cout<<"*";
}
}
if(n!=1) cout<<n;
}
int main(){
int n;
cin>>n;
phantich(n);
return 0;
}
Dạng 5. Nhân mũ
BAI1.INP BAI1.OUT
60 2^2*3^1*5
Bài làm
#include <bits/stdc++.h>
using namespace std;
void phantich(int n){
for(int i=2;i<=sqrt(n); i++){
if(n%i==0){
int mu=0;
while(n%i==0){
mu++;
n/=i;
}
cout<<i<<"^"<<mu;
if(n!=1) cout<<"*";
}
}
if(n!=1) cout<<n<<"^"<<"1";
}
int main(){
int n;
cin>>n;
phantich(n);
return 0;
}
Bài 64. Hãy đếm số lượng thừa số nguyên tố khác nhau trong phân tích thừa số nguyên tố
của 1 số nguyên dương. Với t bộ test . 1<=t<=100 và 1<=n<= 10
9
BAI1.INP BAI1.OUT
60
128
10000
3
1
2
Bài làm
#include <bits/stdc++.h>
using namespace std;
int phantich(int n){
int res=0;
for(int i=2;i<=sqrt(n); i++){
if(n%i==0){
res++;
while(n%i==0){
n/=i;
}
}
}
if(n!=1) res++;
return res;
}
int main(){
int t;
cin>>t;
for(int i=1;i<=t;i++){
int n;
cin>>n;
cout<<phantich(n)<<endl;
}
return 0;
}
Bài 66. Một số nguyên dương
N
được gọi số nguồn của số nguyên
M
nếu
tổng
của
N
với các chữ số của nó. dụ:
245N
sẽ số nguồn của số
256M
(vì
245 2 4 5M
). những số nguyênơng không số nguồn số lại nhiều số
nguồn. Ví dụ: số 7 thì không có số nguồn, còn số 216 có 2 số nguồn là 198 và 207.
Cho số nguyên dương
M
.Hãy tìm số nguồn nhỏ nhất của nó.
Yêu cầu: Nhập từ bàn phím số nguyên dương
M
(
0 10000M
).Đưa ra kết quả màn hình số
nguồn nhỏ nhất của số
M
, nếu
M
không có số nguồn thi ghi “Khong co so nguon”.
Ví dụ:
Nhập vào Kết quả màn hình
7 Khong co so nguon
216 So nguon nho nhat la: 198
Bài làm
#include <bits/stdc++.h>
using namespace std;
int songuon(int n){
int tong=n;
while(n>0){
int s=n%10;
tong= tong +s;
n/=10;
}
return tong;
}
int main(){
int n; int dem=0;
cin>>n;
for(int i=1; i<=n; i++){
if(songuon(i)==n){
dem++;
cout<<"so nguon nho nhat la:"<< i;
break;
}
}
if(dem ==1) cout;
else cout<<"khong co so nguon";
return 0;
}
Bài 67. Hai số tự nhiên a b được gọi là số nguyên tố tương đương nếu chúng chung
các ước số nguyên tố. Hãy viết chương trình nhập vào hai số kiểm tra xem chúng
nguyên tố tương đương với nhau không. Ví dụ: 15 và 75 là hai số nguyên tố tương đương. Giải
thích
BAI1.INP BAI1.OUT
75 15
1125 2025
La hai so nguyen to tương duong
Giải thích: có hai ước nguyên tố là 3 và 5.
Tích là 3.5 =15
3
n
. 5 3 . 5 hai số nguyên tố
m k h
tương đương
Bài làm
#include <bits/stdc++.h>
using namespace std;
long long t1=1,t2=1,a,b,d1,d2;
int main(){
cin>>a>>b;
for(int i=2;i<=sqrt(a);i++){
if(a%i==0){
d1++;
t1=t1*i;
while(a%i==0)
a=a/i;
}
}
if(a>1){
d1++;
t1=t1*a;
}
for(int i=2;i<=sqrt(b);i++){
if(b%i==0){
d2++;
t2=t2*i;
while(b%i==0) b=b/i;
}
}
if(b>1) {
d2++; t2=t2*b;}
if(t1==t2&&d1==d2) cout<<"la hai so nguyen to tuong duong";
else cout<<"no";
return 0;
}
Cách 2. Thu gon hơn . bỏ biến đếm
#include <bits/stdc++.h>
using namespace std;
long long t1=1,t2=1,a,b;
int main(){
cin>>a>>b;
for(int i=2;i<=sqrt(a);i++){
if(a%i==0){
t1=t1*i;
while(a%i==0)
a=a/i;
}
}
if(a>1){
t1=t1*a;
}
for(int i=2;i<=sqrt(b);i++){
if(b%i==0){
t2=t2*i;
while(b%i==0) b=b/i;
}
}
if(b>1) {
t2=t2*b;}
if(t1==t2) cout<<"la hai so nguyen to tuong duong" ;
else cout<<"no";
return 0;
}
Bài 72. Theo thứ tự các số 6, 8, 66,68, 86, 88, 666,... theo quan niệm là số lộc phát. Hãy tìm
số thứ n. Với n<=510.
BAI1.INP BAI1.OUT
1
102
6
866888
510 88888888
Bài làm
#include <bits/stdc++.h>
using namespace std;
int lp(int n){
while(n!=0){
int r=n%10;
if(r!=6 && r!=8) return 0;
n/=10;
}
return 1;
}
int dem=0, a[1000];
int main(){
int n;
cin>>n;
for(int i=1;i<=1000000000;i++){
if(lp(i)){
dem++;
a[dem]=i;
if(dem==n)
break;
// cout<<a[dem]<<endl;
}
}
cout <<a[n];
return 0;
}
Bài 73. Các số 2,4,6,8,10,...n. được viết liền nhau thành số 246810121416....... hãy tìm chữ
số thứ n của số trên.
BAI1.INP BAI1.OUT
6
10
12
0
4
6
Bài làm
#include <bits/stdc++.h>
using namespace std;
string st;
int n;
int main(){
cin>>n;
st=" ";
for(int i=1; i<=n ; i++){
st=st + to_string(2*i);
}
cout << st[n];
return 0;
}
Bài 74. Kiểm tra số thuận nghịch với nhiều test. N<=10
18
BAI1.INP BAI1.OUT
999999999999999999
1234321
10000
yes
yes
no
Bài làm
#include <bits/stdc++.h>
using namespace std;
int tn(long long n){
long long m=n, res=0;
while(n!=0){
res=res*10+ n%10;
n/=10;
}
if(res==m) return 1;
return 0;
}
int main(){
int t;
cin>>t;
long long n;
while(t--){
cin>>n;
if(tn(n)) cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
return 0;
}
Cách 2.
#include <bits/stdc++.h>
using namespace std;
int tn1(string st){
long long l=0, r= (st.size()-1);
while(l<r){
if(st[l]!=st[r]) return 0;
l++; r--;
}
return 1;
}
int main(){
int t;
cin>>t;
string s;
while(t--){
cin>>s;
if(tn1(s)) cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
return 0;
}
Bài 80. Trong cửa hàng c loại thùng sơn 16kg,17kg 21kg.
t người khách cần
mua 185kg. Hãy chương để tính cho biết cần n cho người khách đó bao nhiêu mỗi loại
để không phải bán lẻ th•ng o
BAI1.INP BAI1.OUT
0 9 2
1 4 6
4 5 1
5 0 5
8 1 0
Bài làm
#include <bits/stdc++.h>
using namespace std;
int main() {
for(int i=0;i<=185;i++){
for(int j=0;j<=185;j++){
for(int k=0;k<=185;k++){
if(((21*i)+(17*j)+(16*k))==185) cout<<i<<" "<<j<<" "<<k<<endl;
}
}
}
return 0;
}
Bài 82. Một số được gọi sđẹp nếu số thuận nghịch, chứa ít nhất một chữ s
6 tổng c chữ s của ch số tận c•ng 8. Viết chương trình liệt đếm xem
trong đoạn giữa hai số nguyên cho trước có bao nhiêu số đẹp như vậy
BAI1.INP BAI1.OUT
1 500 161
1
Bài làm
#include <bits/stdc++.h>
using namespace std;
bool sodep(int n){
int m=n;
int a, dao=0, dem=0, tong=0;
while(n>0){
a=n%10;
tong=tong +a;
if(a==6)dem++;
dao=dao*10 +a;
n=n/10;
}
if(dao==m&& dem>=1&& tong%10==8)
return true;
else return false;
}
int main(){
int demm=0, m, n;
cin>>m>>n;
for(int i=m; i<=n; i++){
if(sodep(i)==true){
demm++;
cout<<i<<" ";
}
}
cout << endl;
cout<<demm;
return 0;
}
Bài 83. N người được mời tham dự một cuộc triển lãm ra mắt sản phẩm mới của
một công ty A, khách mời thứ i đăng đến vào thời điểm thứ xi ra về váo cuối thời điểm
thứ yi (xi<yi). Ban tổ chức sẽ chuẩn bị chổ ngồi cho các khách mời. Em hãy giúp ban tổ chức
tính xem cần phải chuẩn bị ít nhất bao nhiêu chổ để c khách mời đến d đều chỗ ngồi
trong thời gian họ tham dự triển lãm.
- dòng đầu tiên ghíoos nguyên Nsố lượng khách mời. 1<=N<=10
4
- dòng thứ i trong N dòng tiếp theo ghi hai số nguyên không âm xi, yi chỉ thời gian khách đến
và ra về ( 0<=xi<yi<=2.10 i=1,2,3 ..N)
3
BAI1.INP BAI1.OUT
6
1 2
2 5
5 7
6 7
1 3
9 11
3 Số chỗ ngồi ít nhất cần chuẩn bị là . vì
- người thư nhất (đến thời điểm 1 về thời điểm 2)
- người thứ 2 đến thời điểm 2, về thời điểm 5
- người thứ 5 đến thời điểm 1, về thời điểm 3
Nên thời điểm thứ 2 cần 3 chỗ ngồi( các thời điểm
còn lại có thể ít hơn)
Bài làm
#include <bits/stdc++.h>
using namespace std;
int N,x,y,i,j,res=0,cnt[2005];
int main(){
cin>>N;
for(i=1;i<=N;i++){
cin>>x>>y;
for(j=x;j<=y;j++){
cnt[j]++;
res=max(res,cnt[j]);
}
}
cout << res;
return 0;
}
Bài 89. Một số gọi là số đẹp nếu tổng các ước của nó là số nguyên tố.
BAI1.INP BAI1.OUT
2211169
2505889
1234567891234567
yes
yes
no 6 co : 1+2+3+6
#include <bits/stdc++.h>
using namespace std;
bool nt(int n){
if (n<2) return false;
for (int i=2;i<=sqrt(n);i++){
if (n%i==0) return false;
}
return true;
}
int check(long long n){
long long sum=0;
for(int i=1; i<=sqrt(n);i++){
if(n%i==0){if(i!=n/i) sum+=i+n/i;
else sum+=i;
}
}
if(nt(sum)) return true;
return 0;
}
int main(){
long long n;
cin>>n;
if(check(n)==true) cout<<"yes";
else cout<<"no";
return 0;
}
Bài 90. Một số gọisố đẹp nếu tổng các ước củalà schinh phuong.voi n<=10
16
BAI1.INP BAI1.OUT
100011559
1234567891234567
yes
no 6 co : 1+2+3+6
Bai lam
#include <bits/stdc++.h>
using namespace std;
bool scp(long long n){
int m=sqrt(n);
if(m*m==n)return true;
return false;
}
int check(long long n){
long long sum=0;
for(int i=1; i<=sqrt(n);i++){
if(n%i==0){if(i!=n/i) sum+=i+n/i;
else sum+=i;
}
}
if(scp(sum)) return true;
return 0;
}
int main(){
long long n;
cin>>n;
if(check(n)==true) cout<<"yes";
else cout<<"no";
return 0;
}
Bài 91. Hai số gọi s đẹp nếu chúng s lượngcác ước bằng nhau. Cho đoạn k, m
hãy đếm xem trong đoạn đó có bao nhiêu cặp số đẹp. n<=1200
BAI1.INP BAI1.OUT
2 1000
1 1200
85048
121295
Bai lam
#include <bits/stdc++.h>
using namespace std;
int check(long long n){
int dem=0;
for(int i=1; i<=sqrt(n);i++){
if(n%i==0){if(i!=n/i)(dem++)+(dem++);
else dem++;
}
}
return dem;
}
int main(){
long long k, m;
long long res=0;
cin>>k>>m;
for(int i=k;i<m;i++){
for(int j=i+1;j<=m;j++){
if(check(i)==check(j)) res++;
}
}
cout<<res;
return 0;
}
Bài 92.
#include <bits/stdc++.h>
using namespace std;
long long n;
struct pt{
long long d,c,vt;
};
bool cmp(pt x,pt y){
if(x.c>y.c)
return true;
if(x.c==y.c&&x.vt<y.vt)
return true;
return false;
}
pt a[100068];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
map<long long,long long>d;
map<long long,long long>kt;
int j=0;
for(long long i=1;i<=n;i++){
a[i].vt=0;
}
for(long long i=1;i<=n;i++){
cin>>a[i].d;
d[a[i].d]++;
if(d[a[i].d]==1){
j++;
kt[a[i].d]=j;
}
}
for(long long i=1;i<=n;i++){
if(a[i].vt==0)
a[i].vt=kt[a[i].d];
}
//for(long long i=1;i<=n;i++){
// cout<<a[i].vt;
//}
//cout<<'\n';
for(long long i=1;i<=n;i++){
a[i].c=d[a[i].d];
}
sort(a+1,a+n+1,cmp);
for(long long i=1;i<=n;i++){
cout<<a[i].d<<" ";
}
}
Bài 93. Cho số n hãy tìm số lớn nhất trong n sau khi đã xóa đi k chữ số. N<=10 k<n
6
BAI1.INP BAI1.OUT
19873
2
987
Bài làm
#include <bits/stdc++.h>
using namespace std;
int solonnhat(int n,int k){
string num=to_string(n);
if(k>=num.length()){
return 0;
}
for(int i=0;i<k;i++){
int j=0;
while(j<num.length()-1&&num[j]>=num[j+1]){
j++;
}
num.erase(num.begin()+j);
}
return stoi(num);
}
int main(){
int n,k;
cin >>n>>k;
int res=solonnhat(n,k);
cout<<res<<endl;
return 0;
}
Bài 93b. Cho số n hãy tìm số nho nhất trong n sau khi đã a đi k chữ số. N<=10 và
6
k<n
BAI1.INP BAI1.OUT
2655913
3 2513
#include <bits/stdc++.h>
using namespace std;
int sonhonhat(int n,int k){
string num=to_string(n);
if(k>=num.length()){
return 0;
}
for(int i=0;i<k;i++){
int j=0;
while(j<num.length()-1&&num[j]<=num[j+1]){
j++;
}
num.erase(num.begin()+j);
}
return stoi(num);
}
int main(){
int n,k;
cin >>n>>k;
int res=sonhonhat(n,k);
cout<<res<<endl;
return 0;
}
Bài 94. Đếm số ước của một số nguyên dương. Voi n<=10
15
BAI1.INP BAI1.OUT
100000000000
121
144
3
Bài làm
#include <bits/stdc++.h>
using namespace std;
long long n;
int dem=0;
int main(){
cin>>n;
for(int i=1; i<=sqrt(n);i++){
if(n%i==0){if(i!=n/i)(dem++)+(dem++);
else dem++;
}
}
cout<< dem ;
return 0;
}
Bài 95. hai số gọi là số đẹp nếu số các ước của nó bằng nhau. N<=10
15
Ví dụ. 121 là số có 3 ước là 1, 11,121
BAI1.INP BAI1.OUT
121 361
11 19
Yes
Yes
Bài làm
#include <bits/stdc++.h>
using namespace std;
int check(long long n){
int dem=0;
for(int i=1; i<=sqrt(n);i++){
if(n%i==0){if(i!=n/i)(dem++)+(dem++);
else dem++;
}
}
return dem;
}
long long a, b;
int main(){
cin>>a>>b;
if(check(a)==check(b)) cout<<"yes";
else cout<<"no";
return 0;
}
Bài 4 đề Quảng xương
#include <bits/stdc++.h>
#include <vector>
using namespace std;
int codi(int x){
int dem=0;
for(int i=1;i<=x;i++){
if (x%i==0){
dem++;
}
}
return dem;
}
int demcodi(int L, int R){
vector <int> codiSequence;
codiSequence.push_back(1);
for (int i = 1; ; i++) {
int nextElement=codiSequence[i-1]+codi(codiSequence[i-1]);
if(nextElement>R){
break;
}
codiSequence.push_back(nextElement);
}
int dem=0;
for(int element:codiSequence){
if (element>=L&&element<=R){
dem++;
}
}
return dem;
}
int main() {
int T;cin>>T;
while(T--){
int L,R;
cin>>L>>R;
int res=demcodi(L,R);
cout<<res<<endl;
}
return 0;
}
Bài 97. An mua được 2 túi kẹo. Túi thứ nhất có x (x>=1) cái túi thứ 2 y (y>=1) cái .
không may an đã lỡ làm mất túi thứ nhấtkhông nhớ trong túi thứ nhất có bao nhiêu cái kẹo.
Cậu chỉ nhớ được tổng số kẹo không vượt quá n chia hết cho k. Các bạn hãy giúp An tính
xem có thể có bao nhiêu cái kẹo có trong túi thứ nhất để mua bổ xung
Nếu có khả năng thì in ra tất cả theo thứ tự tăng dần. Nếu không biết số kẹo thì in ra -1.
Một dòng duy nhất chứa 3 số nguyên y, k, n. 1<=y,k,n<=10 và n/k<=10
9 5
BAI1.INP BAI1.OUT
10 1 10
10 6 40
-1
2 8 14 20 26
Bài làm
#include <bits/stdc++.h>
using namespace std;
int y, k, n;
int dem=0;
int main(){
cin >>y>>k>>n;
if(y+1>n) cout<<"-1";
else {for(int i=1;i<=n;i++){
if((y+i)%k==0&&((y+i)<=n)){
dem++;
cout<<i<<" ";
}
}
if(dem==0) cout<<"-1";
}
return 0;
}
| 1/53

Preview text:

BÀI TẬP CƠ BẢN (SỐ HỌC)
BÀI 1: Cho ba số nguyên a, b, c. Hãy tìm số lớn nhất trong ba số trên. BÀI LÀM #include using namespace std; int a, b, c; int main(){
cin>>a>>b>>c; int kq=max(a,b); kq=max(kq,c);
cout << "dap an:" << kq; return 0; } Cách 2: #include using namespace std; int a, b, c; int main(){
cin>>a>>b>>c; if(a==b&&b==c){
cout<<"khong co gia tri max"< } else { int maxx=a; if( b>maxx){ maxx=b;} if(c> maxx){ maxx=c;}
cout << "gia tri max:"<< maxx<} return 0; }
BÀI 2: Tìm số nguyên dương nhỏ nhất sao cho 1+2+3+4+...+n >10000 BÀI LÀM #include using namespace std; int sum=0; int main(){ for(int i=1;i<=1000;i++) { sum+=i; if(sum>10000) {cout< return 0; } } }
BÀI 3:Tìm ước chung lớn nhất của hai số a và b. BÀI LÀM #include using namespace std; int a, b;
long long gcd(long long a,long long b){ if(b==0) return a; return gcd(b,a%b); } int main(){ cin>>a>>b; cout< return 0; }
BÀI 4: Tìm ước chung lớn nhất và bội chung nhỏ nhất của hai số nguyên dương a và b. BÀI LÀM #include using namespace std; int gcd(int a, int b){ if(b==0) return a; return gcd(b,a%b); } int a, b; int tich; int main(){ cin>>a>>b; tich=a*b;
cout <<"UCLN = " << gcd(a,b)< cout<<"BCNN = "< return 0; }
BÀI 5. Cho số tự nhiên n. Tìm số nguyên nhỏ nhất chia hết cho 1,2,3,4...,n.
Input: - dòng dầu tiên đưa vào T là số lượng bộ test. -
T dòng tiếp theo mỗi dòng đưa vào một bộ test. Mỗi bộ test là một số tự nhiên n. -
T thỏa mãn ràng buộc: 1<=T<=104 -
Đưa kết quả mỗi test theo từng dòng. Input Output 2 3 6 5 60 BÀI LÀM Cachs 1. #include using namespace std; int test; int gcd(int a, int b){ if(b==0) return a; return gcd(b,a%b); } long long bsc(int a,int b){ long long tich=a*b; if(b==0) return a; return tich/gcd(a,b); } int main(){ cin>>test; while(test--){ int n; cin>>n; long long kq=1; for(int i=1;i<=n;i++){ kq=bsc(kq,i); } cout< } return 0; } Cach 2 #include using namespace std; int test; long long bsc(int a,int b) { long long tich=a*b; while(a*b!=0) { if(a>b)a%=b; else b%=a; } return tich/(a+b); } int main(){ cin>>test; while(test--){ int n; cin>>n; long long kq=1; for(int i=1;i<=n;i++){ kq=bsc(kq,i); } cout< } return 0; }
BÀI 6. Cho số nguyên dương n. Tìm n số nguyên tố đầu tiên. Input Output 5 2 3 5 7 11 BÀI LÀM #include using namespace std; bool check(int n){ if(n<2) return false;
for(int i=2;i<=sqrt(n);i++){ if(n%i==0) return false; } return true; } int main(){ int n; cin>>n; int dem=0, i=2;
while(dem if(check(i)==true){ cout< i++; } return 0; } Cach 2. #include using namespace std; bool check(int n){ if(n<2) return false;
for(int i=2;i<=sqrt(n);i++){ if(n%i==0)return false; } return true; } int main(){ int n; cin>>n; int dem=0; for(int i=2; ;i++) { if(check(i)==true){ cout< } if(dem==n) break; } return 0; }
BÀI 7. Cho bốn số nguyên dương X, Y, Z và N. Hãy tìm số nguyên dương nhỏ nhất có N
chữ số chia hết cho đồng thời X, Y, Z.
Input:
- Dòng đầu tiên đưa vào số lượng test T(T<=100).
- Những dòng kế tiếp đưa vào T bộ test. Mỗi bộ test là bộ bốn số X, Y, Z, N. Các số
1<=X,Y,Z<=105 ; N<=18. Input Output 3 2 3 5 4 1020 4 5 6 3 120 3 5 7 2 -1 BÀI LÀM #include using namespace std;
long long bscnn(long long a, long long b) { long long tich=a*b; while(a*b!=0) {if(a>b)a%=b; else b%=a; } return tich/(a+b); } int main(){ int test; cin>>test; while(test--) { long long x,y,z,n;
cin>>x>>y>>z>>n; long long res=bscnn(x,y); res=bscnn(res,z);
long long so_nho_nhat=pow(10,n-1);
if(so_nho_nhat else if(so_nho_nhat%res==0)cout< else { cout<<(so_nho_nhat/res+1)*res; } } cout< return 0; }
BÀI 8. Cho hai số a và b trong đó a<=10 12 , b<=10 250 . Tìm ước chung lớn nhất của hai số a và b. Input:
- Dòng đầu tiên đưa vào T là số lượng bộ test.
- T dòng tiếp theo đưa các bộ test. Mỗi bộ test gồm hai dòng: dòng đầu tiên đưa vào số a, dòng tiếp theo đưa vào số b.
- các số T, a, b thỏa mãn ràng buộc: 1<=T<=100; 1<=a<=10 12 ; 1<=b<=10 250 Output:
-Đưa ra kết quả mỗi test theo từng dòng. Input Output 1 1221 3
1234567891011121314151617181920212223242526272829 BÀI LÀM #include using namespace std;
long long gcd(long long a,long long b){ if(b==0) return a; return gcd(b,a%b); } int main(){ int test; cin>>test; while(test--){ long long a; cin>>a; cin.ignore(); string b; cin>>b; long long tem=0; for( int i=0; i { tem*=10; tem+=(b[i]-48); tem%=a; } cout << gcd(tem,a); } cout< return 0; } Cachs 2 #include using namespace std;
long long gcd(long long a,long long b){ if(b==0) return a; return gcd(b,a%b); } int main(){ long long a; cin>>a; string b; cin>>b; long long tem=0; for( int i=0; i tem*=10; tem+=(b[i]-48); tem%=a; //cout< } cout << gcd(tem,a); return 0; }
BÀI 9. Nhập vào một số nguyên dương n. Hãy liệt kê các ước của n. BÀI LÀM #include using namespace std; int n; int main(){ cin>>n; for(int i=1;i<=n;i++) { if(n%i==0)cout< } return 0; }
BÀI 10. Nhập vào một số nguyên dương n. Hãy liệt kê các ước số lẻ của n. BÀI LÀM #include using namespace std; int n; int main(){ cin>>n; for(int i=1;i<=n;i++) {
if(n%i==0&&i%2==1) cout< } return 0; }
BÀI11. Nhập vào một số nguyên dương n. Hãy liệt kê các ước số nguyên tố của n. BÀI LÀM #include using namespace std; int main(){ int n; cin >>n; for(int i=2;i<=n;i++) { while(n%i==0) {cout< n=n/i; } } return 0; }
BÀI 12. Cho số nguyên dương n. Hãy liệt kê các số nguyên tố trong khoảng từ 1 đến n. BÀI LÀM #include using namespace std; bool check(int n) { if(n<2)return false;
for(int i=2;i<=sqrt(n);i++) { if(n%i==0) return false; } return true; } int main(){ int n; cin >>n; for(int i=2;i<=n;i++) if(check(i)==true) cout < return 0; }
BÀI 13. Cho số nguyên dương n. Hãy liệt kê các số chính phương trong khoảng từ 1 đến n. BÀI LÀM #include using namespace std; bool check(int n) { int scp=sqrt(n); if(scp*scp==n)return true; return false; } int main(){ int n; cin >>n; for(int i=1;i<=n;i++) if(check(i)==true) cout < return 0; }
BÀI22. Cho số nguyên dương n. Kiểm tra xem trong khoảng từ 1 đến n có bao nhiêu số có
3 ước nguyên dương .( Số đó là bình phương của một số nguyên tố).
BÀI LÀM #include using namespace std; bool check(int n) { if(n<2)return false;
for(int i=2;i<=sqrt(n);i++) { if(n%i==0) return false; } return true; } int main(){ int n; cin >>n; int dem =0;
for(int i=2;i<=sqrt(n);i++) if(check(i)==true) dem++; cout < return 0; }
BÀI23. Cho số nguyên dương n. Liệt kê xem trong khoảng từ 1 đến n có bao nhiêu số có 3
ước nguyên dương .( Số đó là bình phương của một số nguyên tố).
BÀI LÀM #include using namespace std; bool check(int n) { if(n<2)return false;
for(int i=2;i<=sqrt(n);i++) { if(n%i==0) return false; } return true; } int main(){ int n; cin >>n;
for(int i=2;i<=sqrt(n);i++) if(check(i)==true) cout < return 0; }
BÀI 24. Kiểm tra xem ba độ dài có phải là độ dài ba cạnh của tam giác không? Đó là tam giác gì? BÀI LÀM #include using namespace std; int main(){ double a, b, c;
cin>>a>>b>>c;
if(a+b>c&&b+c>a&&a+c>b){
if(a==b&&a==c) cout<<"tam giac la tam giac deu";
else if(a==b||a==c||b==c) cout<<"tam giac la tam giac can";
else if(a*a+b*b==c*c||a*a+c*c==b*b||c*c+b*b==a*a) cout<<"la tam giac vuong";
else cout<<"la tam giac thuong"; }
else cout <<"day khong phai la do dai cua tam giac"; return 0; }
BÀI 36. Nhập vào một số tự nhiên N. Hãy in ra số đảo ngược lại của số N.( bỏ số 0 trước nếu có). BÀI LÀM #include using namespace std; long long n; long long res; int a; int main(){ cin>>n; res=0; while (n!=0) { a=n%10; res= res*10+a; n=n/10; } cout< return 0; }
BÀI 42: Cho hai số nguyên dương a, b thỏa mãn 2nguyên tố cùng nhau trong khoảng (a,b). Input Output 3 5 34 35 45 BÀI LÀM #include using namespace std; int ucln(int a, int b){ if(b==0) return a; return ucln(b, a%b); } int main(){ int a, b; cin>>a>>b;
for(int i=a;i for(int j=i+1;j<=b;j++){ if(ucln(i,j)==1){ cout< } } } return 0; }
BÀI 43. Kiểm tra xem hai số nguyên dương có phải là hai số nguyên tố cùng nhau không. BÀI LÀM #include using namespace std; int a, b; int ucln(int a,int b){ while(a*b!=0){ if(a>b)a=a%b; else b=b%a; } return a+b; } int main(){ cin>>a>>b; if (ucln(a,b)==1)
cout<<"la hai so nguyen to cung nhau";
else cout<<"khong phai la hai so nguyen to cung nhau"; return 0; }
BÀI 44: Cho hai số nguyên dương a, b thỏa mãn 2nguyên tố cùng nhau trong khoảng (a,b). Input Output 3 5 3,4 3,5 4,5 BÀI LÀM #include using namespace std; int a, b; int ucln(int a,int b){ while(a*b!=0){ if(a>b)a=a%b; else b=b%a; } return a+b; } int main(){ cin>>a>>b;
for(int i=a;i for(int j=i+1;j<=b;j++) if (ucln(i,j)==1) cout< return 0; }
BÀI 45. Cho số nguyên dương n. Hãy liệt kê các cặp số nguyên tố có tổng bằng n. -
Dòng đầu tiên vơi T bộ test -
Dòng thứ hai trở đi là T số tự nhiên n. Input Output 2 2 10 10 20 3,7 5,5 20 3,17 7,13 BÀI LÀM #include using namespace std; bool check(int n) { if(n<2)return false;
for(int i=2;i<=sqrt(n);i++) { if(n%i==0) return false; } return true; } int main(){ int test; cin>>test; while(test--){ int n; cin>>n; for(int i=1;i<=n/2;i++)
if(check(i)==true&&check(n-i)==true) cout < } cout< return 0; }
BÀI 46. Cho số nguyên dương n. Hãy liệt kê các số nguyên dương nhỏ hơn n và nguyên tố cùng nhau với n. Input Output 10 1 3 7 9 BÀI LÀM #include using namespace std; int a, b, n; int ucln(int a,int b){ while(a*b!=0){ if(a>b)a=a%b; else b=b%a; } return a+b; } int main(){ cin>>n;
for(int i=1;i if (ucln(i,n)==1) cout< return 0; }
BÀI 46. Cho số nguyên dương n. Hãy đếm các số nguyên dương nhỏ hơn n và nguyên tố cùng nhau với n. Input Output 10 4 BÀI LÀM #include using namespace std; int a, b, n; int dem=0; int ucln(int a,int b){ while(a*b!=0){ if(a>b)a=a%b; else b=b%a; } return a+b; } int main(){ cin>>n;
for(int i=1;i if (ucln(i,n)==1) dem++; cout< return 0; }
Bài 47. Hai số gọi là số đẹp nếu chúng đều là số nguyên tố và hơn kém nhau k đơn vị. Cho
số nguyên dương n. Hãy liệt kê các cặp số đẹp từ 1 đến n.( k<=n)
Input Output 20 4 3,7 7,11 13,17 Ví dụ: n = 20 , k = 4 BÀI LÀM #include using namespace std; bool check(int n) { if(n<2)return false;
for(int i=2;i<=sqrt(n);i++) { if(n%i==0) return false; } return true; } int main(){ int n, k; cin>>n; cin>>k; for(int i=1;i<=n;i++)
if(check(i)==true&&check(i+k)==true&&i+k<=n) cout < return 0; }
Bài 48. Hai số gọi là số đẹp nếu chúng đều là số nguyên tố và hơn kém nhau k đơn vị. Cho
số nguyên dương n. Hãy đếm các cặp số đẹp từ 1 đến n.
Input Output 20 4 3 Ví dụ: n = 20 , k = 4 BÀI LÀM #include using namespace std; bool check(int n) { if(n<2)return false;
for(int i=2;i<=sqrt(n);i++) { if(n%i==0) return false; } return true; } int main(){ int n, k, dem=0; cin>>n; cin>>k; for(int i=1;i<=n;i++)
if(check(i)==true&&check(i+k)==true&&i+k<=n) dem++; cout < return 0; }
BÀI 54. k là số nguyên tố. Số nguyên tố an toàn nếu 2k+1 củng là số nguyên tố. Cho số
nguyên dương n. Hãy tìm các cặp số nguyên tố thỏa mãn đồng thời là số nguyên tố và số
nguyên tố an toàn nhỏ hơn hoặc bằng n.
BÀI LÀM Input Output 100 2 ,5 3 ,7 5 ,11 11 ,23 23 ,47 29 ,59 41 ,83 #include using namespace std; bool check(int n) { if(n<2)return false;
for(int i=2;i<=sqrt(n);i++) { if(n%i==0) return false; } return true; } int main(){ int n; cin>>n; for(int i=1;i<=n;i++)
if(check(i)==true&&check(2*i+1)==true&&2*i+1<=n) cout< return 0; }
BÀI 55. k là số nguyên tố. Số nguyên tố an toàn nếu 2k+1 củng là số nguyên tố. Cho số
nguyên dương n. Hãy tìm các số nguyên tố an toàn nhỏ hơn hoặc bằng n.
Input Output 100 5 7 11 23 47 59 83 BAI LAM #include using namespace std; bool check(int n) { if(n<2)return false;
for(int i=2;i<=sqrt(n);i++) { if(n%i==0) return false; } return true; } int main(){ int n; cin>>n; for(int i=1;i<=n;i++)
if(check(i)==true&&check(2*i+1)==true&&2*i+1<=n) cout<<2*i+1<<" "; return 0; }
BÀI 56. Cho cặp số nguyên dương a, b.(a và b<= 1012 )hãy tìm số lượng ước chung của hai
số a và b.(Đó chính là số lượng ước của ước chung lớn nhất của a và b.)
Input Output 4 5 1 72 180 9 BÀI LÀM #include using namespace std; long long a, b,m; int dem=0;
long long ucln(long long a,long long b){ while(a*b!=0){ if(a>b)a=a%b; else b=b%a; } return a+b; } int main(){ cin>>a>>b; m=ucln(a,b);
for(long long i=1;i<=m;i++) if (m%i==0) dem++; cout< return 0; }
BÀI 57. Cho số nguyên dương n. (n<= 10 12 ). Hãy đưa ra chữ số lớn nhất của n. Input Output 6 6 334988 9 BÀI LÀM #include using namespace std; long long n; long long m=0; long long a; int main(){ cin>>n; while(n!=0){ a=n%10; n=n/10; if(m<=a) m=a; } cout< return 0; } Cách 2: #include using namespace std; int n; string a; int main() {
//freopen ("Bai2.inp","r",stdin);
//freopen ("bai2.out","w",stdout); cin >> n; a="1"; string s=to_string (n);
for (int i=1;i if (s.substr(i,1)>a) a=s.substr(i,1); } int max=stoi(a); cout << max; return 0; }
BÀI 58. Cho số nguyên dương n. Hãy đếm xem n có bao nhiêu chữ số và tổng các chữ số của n. Input Output 12345 5 15 123456 6 21 BÀI LÀM #include using namespace std; long long n; long long res; long long dem=0; int a; int main(){ cin>>n; res=0; while (n!=0) { a=n%10; res= res+a; n=n/10; dem++; } cout< return 0; }
BÀI 59. Cho số n nguyên dương. Hãy in ra số lớn nhất trong các chữ số của n.
Ví dụ: 256790 in ra 976520 BÀI LÀM #include using namespace std; int i,j; string s; int main() {
//freopen("doichuso.inp","r",stdin);
//freopen("doichuso.out","w",stdout); cin>>s; for(i=0;i { char Max=s[s.size()-1]; int vt=s.size()-1; for(j=s.size()-1;j>i;j--) { if(Max { Max=s[j]; vt=j; } if(Max>s[i]) { swap(s[i],s[vt]); } } } cout<}
BÀI 60. Cho n số nguyên . Hãy đưa ra số lượng của dãy con có tổng các phần tử lớn hơn
hoặc bàng S. Hãy đưa ra Độ dài của dãy con liên tiếp ngắn nhất có tổng lớn hơn hoặc
bằng
S.(bài 4 Thọ Xuân)(dãy con liên tiếp và lồng nhau ) Input Output 12 30 4 5 1 3 5 10 7 4 9 2 8 11 5 BÀI LÀM #include long long sum=0; int res,N,L=1,i,R,S,a[100005]; using namespace std; int main(){
ios_base::sync_with_stdio(false); cin.tie(0);cout.tie(0);
//freopen("BAI4.INP","r",stdin);
//freopen("BAI4.OUT","w",stdout); cin>>N; cin>>S;
for (i=1 ; i<=N; i++) cin>>a[i];
res=N+1; // N+1 vuot qua so pt cua day da cho (khong co day con thỏa man) for (R=1; R<=N; R++) {
sum+=a[R]; // tinh tong day de tim sum
while (sum>=S){// tim duoc tong day con thoa man
res=min(res, R-L+1); // ghi nhan so phan tu cua day con
sum-=a[L]; L++; // di tim day con ngan hon } }
if (res==N+1) cout<<"-1"; // khong co day con nao else cout< return 0; }
BÀI 61. Nhập vào một số nguyên n. Hãy đưa ra ước số nguyên tố lớn nhất của n. Input Output 100 5 79 7 BÀI LÀM #include using namespace std; int res; int main(){ int n; cin >>n; for(int i=2;i<=n;i++) { while(n%i==0) {if(res<=i)res=i; n=n/i; } } cout< return 0; }
BÀI 65. Ước thực sự của số tự nhiên N là ước nguyên dương khác 1 và chính nó. Hai số
được gọi là anh em nếu chúng có tổng các ước thực sự bằng nhau.
Ví dụ: 6 và 25 được gọi là hai số anh em vì các ước thực sự của 6 là 2 và 3 có tổng bằng 5 và
các ước thực sự của 25 là 5 có tổng là 5.
Yêu cầu: Viết chương trình để kiểm tra hai số có phải là hai số anh em không?
Dữ liệu vàotừ file văn bản BAI1.INP: Chỉ gồm một dòng duy nhất chứa hai số nguyên dương
M, N (0 < M, N < 104) cách nhau ít nhất một ký tự trống.
Kết quảghi file văn bản BAI1.OUT: Chỉ một dòng duy nhất chứa xâu ‘YES’ nếu M, N là hai số
anh em, ngược lại ghi ra xâu ‘NO’. Ví dụ: BAI1.INP BAI1.OUT BAI1.INP BAI1.OUT 6 25 YES 12 13 NO 49 10 YES BÀI LÀM #include using namespace std; int check (int n){ int dem=0; for(int i=2;i {
if(n%i==0){if(i!=n/i) dem=(dem++)+(dem++); else dem++; } return dem; } } int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
freopen("bai60.inp","r", stdin);
freopen("bai60.out","w", stdout); int n, m; cin>>n>>m;
if(check(n)==check(m))cout <<"yes"; else cout<<"no"; return 0; }
BÀI 66. Cho một dãy a gồm n số nguyên dương. Hãy cho biết có bao nhiêu cặp số a i +a j
chia hết cho 3. Với 1<=i Input Output 4 3,6 3 6 9 12 3,9 3,12 6,9 6,12 9,12 BÀI LÀM #include using namespace std; long long n,a[100005]; int main(){ cin>>n; for (int i= 1; i<= n; i++) cin>>a[i]; for (int i=1; i< n; i++)
for (int j= i+1; j<= n; j++){
if((a[i]+a[j])%3==0) cout < } cout<}
Bài 75. Kiểm tra xem một số có phải là số đối xứng không BAI5.INP BAI5.OUT 12321 12321 123345 0 #include using namespace std; bool kimtradoixung(int n){ int m=0; int tam=n; while (n>0) { int a; a=n%10; n=n/10; m= m*10+a; } if(m==tam) return true; return false ; } int main(){ int n; cin>>n;
if(kimtradoixung(n)==true) cout< else cout<<0; return 0; }
Bài 89. Tìm số nguyên tố nhỏ nhất lớn hơn số n cho trước. BAI5.INP BAI5.OUT 9 9 (20) (23) Bài làm #include using namespace std; int nguyenTo(int n) { if (n < 2) return 0;
for (int i = 2; i <= sqrt(n); i++) { if (n % i == 0) return 0; } return 1; } int main() { int n; cin >> n; int x = n + 1; while (!nguyenTo(x)) x++; cout << x; return 0; } Bài 91. SốP là
nếu P nguyên tố và P = 2 số Mersenne
n – 1, mà n cũng là số nguyên tố.
a) Kiểm tra P có là số Mersenne hay không? Nếu có ghi ra 1 ngược lại ghi 0.
b) Tìm các số Mersenne nhỏ hơn hoặc bằng n.
c) Tìm các số Mersenne nằm trên đoạn [m, n]. BAI5.INP BAI5.OUT 11 127 1 3 7 31 127 31 127 Bài làm #include using namespace std; int nguyenTo(int n) { if (n < 2) return 0;
for (int i = 2; i <= sqrt(n); i++) { if (n % i == 0) return 0; } return 1; } int Mersenne(int n){ int i = 0; n += 1; while (n > pow(2, i)) { i++; } if (n == pow(2, i)) return 1; else return 0; } int main() { int m, n; cin >> m >> n;
if (nguyenTo(n) && Mersenne(n))
cout << 1 << endl;
else cout << 0 << endl;
for (int i = 2; i <= n; i++) {
if (nguyenTo(i) && Mersenne(i)) cout << i << " "; } cout << endl;
for (int i = m; i <= n; i++) {
if (nguyenTo(i) && Mersenne(i)) cout << i << " "; } return 0; }
Bài 92. Con ốc sên. Con ốc sên đang ở gốc một cái cây cao v mét tính từ gốc. Ốc sên muốn
bò lên ngọn cây để ăn những lá non trên đó. Ban ngày ốc sên bò được a mét lên trên, nhưng ban
đêm khi ngủ nó bị trôi xuống b mét.
Yêu cầu: Cho các số nguyên a, b, v (1 <= b < a <= v <= 109). Hãy xác định số ngày cần thiết
để ốc sên lên tới ngọn cây. Ví dụ: BAI5.INP BAI5.OUT 2 1 5 4 Bai lam #include using namespace std; int main (){ long long a, b, v;
cin >> a>> b >> v; if (a==v) cout << 1; else { if ((v-b)%(a-b)==0) cout<<(v-b)/(a-b);
else cout<<(v-b)/(a-b)+1; } return 0; }
Bài 93. Tìm một số nguyên dương k nhỏ nhất sao cho tích các chữ số của k bằng n (k, n là 2 số nguyên dương). BAI5.INP BAI5.OUT 72 89 ( 8.9 = 72) Bài làm #include using namespace std; int main() { int n, a = 0; cin >> n;
for(int i = 9; i > 1; i--) {
while(n % i == 0 && n > 1) { a = a*10 + i; n = n/i; } } int b = 0; while(a > 0){ int tmp = a % 10; b = b * 10 + tmp; a = a / 10; } if(n > 1) cout << -1; else cout << b; return 0; }
Bài 94. Số Palidrome là số đối xứng, nghĩa là đọc từ trái sang phải hay từ phải sang trái
ta
đều được 1 số. Ví dụ: 11, 121, 1331, …. Nhập 2 số nguyên dương m, n. Liệt kê dãy số vừa là
số nguyên tố vừa là số Palidrome trong đoạn [m, n]. BAI5.INP BAI5.OUT 100 200 101 131 151 181 191 Bài làm #include using namespace std; int palidrom(int n) { int x = n; int d = 0; while (n > 0) { d = d*10 + n%10; n /= 10; } if (x == d) return 1; else return 0; } int nguyenTo(int n) { if (n < 2) return 0;
for (int i = 2; i <= sqrt(n); i++) { if (n % i == 0) return 0; } return 1; } int main () { long m, n; cin >> m >> n;
for (int i = m; i <= n; i++) {
if (palidrom(i) && nguyenTo(i)) cout << i << " "; } return 0; }
Bài 115. Tìm ước nguyên tố lớn nhất của số n. (độ phức tạp là log(n)) Bài Làm #include using namespace std; int solve(int n){ int res;
for(int i=2; i<=sqrt(n);i++){ while(n%i==0){ res=i; n/=i; } } if(n!=1) res=n; return res; } int main(){ int n; cin >>n; cout<< solve(n); return 0; }
Bài 12. Viết chương trình nhập vào tư 2 đến n số nguyên tố đầu tiên. #include using namespace std; int main() { int n;
cout<<"Nhap mot so bat ky: "; cin>>n; if (n<2) {
cout<<"Khong ton tai bat ky so nguyen to nao!" << endl; } else if (n==2) {
cout<<"Danh sach cac so nguyen to tu 0 den 2 la: 2 " << endl; } else if (n>2) {
cout<<"Danh sach cac so nguyen to tu 0 den " << n << " la: " << endl;
cout<<2<cout<<3< for (int i=5; i<=n; i++) for (int j=2; j*j<=i; j++) { if (i % j == 0) break; else if (j+1 > sqrt(i)) {
cout << i << endl; } } } return 0; }
Bài 14. Kiểm tra một số có phải là số hoàn hảo. Số hoàn hào là cố có tổng các ước của nó
bằng chính nó. 28 = 1 2 4 7, 14
#include using namespace std; bool istuc(int x){ int s = 0;
for (int i = 1; i < x; i++){ if (x%i == 0) s += i; } if (s==x) return true; else return false; }; int main() { int n; cout <<"Nhap n: "; cin >> n; if (istuc(n)==true) cout <else cout <cout << endl; return 0; }
Bài 27. Tìm số chính phương trong đoạn từ x dến y (kể cả x và y).
(1<=x<=y<=10 9 ). In ra kết quả số lượng số chính phương BAI4.INP BAI4.OUT 2 10 2 7 1234567890 35134 25 100 6 Cách 1. #include using namespace std; long long X, Y; int d=0; int main(){ cin>>X>>Y;
for(int i=(int)sqrt(X); i<=(int)sqrt(Y)+1; i++)
if(((i*i)>=X)&&((i*i)<=Y)) d++; cout< return 0; } Cách 2. #include using namespace std; long long X, Y; int main(){ cin>>X>>Y; int x=(int)sqrt(X); int y=(int)sqrt(Y);
if(x*x==X) cout<<(y-x)+1; else cout<<(y-x); return 0; }
Bài 29. Tính tổng n số chính phương đầu tiên. Kết quả đưa ra là phần dư chia cho 2021.
Với n<= 10 10 . ví dụ T= 1+4+9+16 =30.
T=1+4+9+16+....+400= 2870. Số cần đưa ra là 2870 mod 2021= 849 BAI4.INP BAI4.OUT 4 30 20 849 Bài làm
Cách 1. ( thường bị quá thời gian nên không ăn hết các test) #include using namespace std; int n; long long sum=0; int main(){ cin>>n; for(int i=1;i<=n;i++){ sum+=i*i; } cout< return 0; }
Cách 2. Công thức tính tổng bình phương của n số nguyên đầu tiên là: n∗ (n+1)∗(2 n+1) 6 K=1/6%2021
K*6≡ 1(mod 2021) k*6 chia cho 2021 dư 1 K*6= 2021+1 suy ra k= 337 #include using namespace std; long long n; int main(){ cin>>n;
cout<<((n%2021)*((n+1)%2021)*((2*n+1)%2021)*337)%2021; return 0; }
Bài 31. Cho trước hai số nguyên dương m, n (m< n). Xác định tam giác vuông có diện tích
lớn nhất với các cạnh a, b, c là các số dương thỏa mãn: m
- dữ liệu vào gồm 1 dòng chưa hai số m, n cách nhau một dấu cách với 3<=m- dữ liệu ra chứa một số nguyên duy nhất là diện tích của tam giác tìm được( định dạng 1 chữa
số thập phân). Nếu không tìm được tam giác vuông thỏa mãn thì ghi số 0.0 BAI29.INP BAI29.OUT 3 20
6.0 (vì tam giác vuông có 3cạnh là 3, 4, 5) 15 20
0.0 (vì không tìm thấy tam giác vuông nào thảo mãn) #include using namespace std;
bool check(int a, int b, int c){
if(a*a + b*b == c*c|| a*a + c*c == b*b || b*b + c*c == a*a) return true; else return false; } int main(){ int m, n; double kq, maxx=0; cin>>m>>n;
for(int i=m; i<=n/2; i++ ){
for(int j=i+1; j<=n/2; j++){
for(int k=j+1; k<=n/2;k++){
if(check(i,j,k)==true &&(i+j+k)>m &&(i+j+k)<=n&&(i+j)>k){ cout< kq= i*j*1.0/2; if(maxx<=kq) maxx=kq; } } } }
cout << fixed< return 0; }
Bài 35. Một số nguyên gọi là không chứa chính phương nếu nó không chia hết cho bất kỳ
số
nguyên nào dạng x 2 với x>1.
Yêu cầu: cho số nguyên n (1<=n<=10 13 ). Hãy tìm ước lớn nhất không chưa chính phương của n. BAI4.INP BAI4.OUT 9 3 20
10( 20 không là ước lớn nhất vì 12=2 2 .5) 121 11
Giải thích: n=2 i .3 j .5 k thì ước lớn nhất không chưa chính phương là 2.3.5 Bài làm #include using namespace std; long long n, ans=1; int main(){ cin>>n;
for(long long i=2; i*i<=n; i++){ if(n%i==0) ans*=i; while(n%i==0) n/=i; } if(n>1) ans*=n;
cout << ans<< endl; return 0; }
Bài 36. Cho số nguyên dương n. (1<=n<=10 14 ). Hãy xác định số lượng ước của n. BAI4.INP BAI4.OUT 9 3 20 6 4 3
Ta chỉ cần tìm ước đến sqrt(n) = i*i. Bài làm #include using namespace std; long long n; int dem=0; int main(){ cin>>n;
for(long long i=1; i*i<=n; i++){ if(n%i==0){ dem++; if(i!=n/i) dem++; } } cout << dem; return 0; }
Bài 40. Số thứ n. Người ta viết liên tục, sát nhau các số 3, 6, 9, 12, 15, …, 2010, 2013 được
một sốsau: A= 3691215…20102013. Hãy tìm chữ số thứ
n của số A.
Yêu cầu: Nhập từ bàn phím số nguyên n 1 n 2000 . Đưa ra kết quả màn hình chữ số thứ n
(từ trái qua phải) của số A. Ví dụ: Nhập vào số n Kết quả màn hình 3 Chu so thu 3 la : 9 7 Chu so thu 7 la : 5 Bài làm #include using namespace std; string st; int n; int main(){ cin>>n; st=" "; for(int i=1; i<=n ; i++){ st=st + to_string(3*i); }
cout << st[n] << endl; return 0; } Cách 2. #include using namespace std; string st; int n, k; int main(){ cin>>n; st=" "; for(int i=1; i<=n ; i++){ st=st + to_string(3*i); k=(int(st[n])-48); } cout << k; return 0; }
Bai 41. Cho hai số nguyên dương a và b. Tìm số nguyên dương k (a<=k lệch giữa các số nguyên liên liếp từ a đến k và tổng các số nguyên liên tiếp từ k+1 đến b là nhỏ nhất.( aBAI1.INP BAI1.OUT 2 7
5 ( tổng từ 2 đến 5 là :14
Tổng từ 6 đến 7 là : 13 Chênh lệch: 1) Bài làm #include #define ll long long using namespace std; long long d = 1e18; long long sum(int m, int n){
return (m*1ll + n*1ll)*(n*1ll - m*1ll + 1)/2;
//tinh tong tu m den n va ép kiẻu 1ll } int a, b, ans; int main(){ cin>>a>>b; int L=a, R=b; while(L<=R){ int mid= (L+R)/2; long long sumt= sum(a,mid);
long long sump= sum(mid+1, b); if(d > abs(sumt- sump)){ d = abs(sumt -sump); ans = mid; } if(sumt else R = mid -1; }
cout << ans << endl; return 0; }
Bài 43. Sàng số nguyên tố. Kiểm tra số có phải là số nguyên tố với nhiều test. Nếu là số
nguyên tố thì đưa ra yes. Không phải là số nguyên tố đưa ra no. Bộ test t<=100 và n<=10 6 BAI1.INP BAI1.OUT 5 23 yes 125 no 101 yes 246 no 1567 yes Bài làm #include using namespace std; int prime[1000001]; void sang(){
for(int i=0; i<=1000000; i++) prime[i]=1; prime[0]=prime[1]=0;
for(int i=2; i<=1000; i++){ if(prime[i]){
for(int j=i*i; j<=1000000; j+=i) prime[j]=0; } } } int main(){ sang(); int t; cin>>t; while(t--){ int n; cin>>n;
if( prime[n]) cout<<"yes"< else cout<<"no"< } return 0; }
Bài 44. Viết chương trình đếm xem trong đoạn [a,b] có bao nhiêu số nguyên tố và tất cả
các chữ số của số nguyên tố đó cũng là số nguyên tố. Với mỗi bộ test ghi hai số a, b.
1 6 ,1<=test<=100. n<=10 6 BAI1.INP BAI1.OUT 2 10 100 4 1234 5678 26 Bài làm #include using namespace std; int prime[1000001]; void sang(){
for(int i=0; i<=1000000; i++) prime[i]=1; prime[0]=prime[1]=0;
for(int i=2; i<=1000; i++){ if(prime[i]){
for(int j=i*i; j<=1000000; j+=i) prime[j]=0; } } } int tachso(int n){ while(n){ int r=n%10;
if(r!=2&&r!=3&&r!=5&&r!=7) return 0; n/=10; } return 1; } int main(){ sang(); int t; cin>>t; while(t--){
int a, b; cin>>a>>b; int dem=0; for(int i=a; i<=b; i++){
if( prime[i]&& tachso(i)) dem++; } cout< } return 0; }
Bài 44. Viết chương trình đưa ra trong đoạn [a,b] có bao nhiêu số nguyên tố và tổng tất cả
các chữ số của số nguyên tố đó cũng là số nguyên tố. Với mỗi bộ test ghi hai số a, b.
1BAI1.INP BAI1.OUT 2 10 100 11 23 29 41 43 47 61 67 83 89 50 90 61 67 83 89 Bài làm #include using namespace std; int prime[1000001]; void sang(){
for(int i=0; i<=1000000; i++) prime[i]=1; prime[0]=prime[1]=0;
for(int i=2; i<=1000; i++){ if(prime[i]){
for(int j=i*i; j<=1000000; j+=i) prime[j]=0; } } } int tongso(int n){ int sum=0; while(n>0){ sum+=n%10; n/=10; } return sum; } int main(){ sang(); int t; cin>>t; while(t--){
int a, b; cin>>a>>b; int dem=0; for(int i=a; i<=b; i++){
if( prime[i]&&prime[tongso(i)]) cout< } cout< } return 0; }
Bài 44. Viết chương trình đưa ra trong đoạn [a,b] có bao nhiêu số nguyên tố và số đảo
ngược của số nguyên tố đó cũng là số nguyên tố. Với mỗi bộ test ghi hai số a, b.
1 ,1<=test<=100. n<=10 6 BAI1.INP BAI1.OUT 2 10 100 11 13 17 31 37 71 73 79 97 50 90 71 73 79 Bài làm #include using namespace std; int prime[1000001]; void sang(){
for(int i=0; i<=1000000; i++) prime[i]=1; prime[0]=prime[1]=0;
for(int i=2; i<=1000; i++){ if(prime[i]){
for(int j=i*i; j<=1000000; j+=i) prime[j]=0; } } } int daoso(int n){ int dao=0; while(n>0){ dao=dao*10 + n%10; n/=10; } return dao; } int main(){ sang(); int t; cin>>t; while(t--){
int a, b; cin>>a>>b; int dem=0; for(int i=a; i<=b; i++){
if( prime[i]&&prime[daoso(i)]) cout< } cout< } return 0; }
Bài 45. Úng dụng sàng số nguyên tố. Nhập vào số nguyên n. Hãy in ra các ước nguyên tố
bé nhất của các số từ 1 đến n. 1<=n<10 7 BAI1.INP BAI1.OUT 20
1 2 3 2 5 2 7 2 3 2 11 2 13 2 3 2 17 2 19 2 Bài làm #include using namespace std; int prime[10000001], n; void sang(){
for(int i=0;i<=10000000;i++){ prime[i]=i; }
for(int i=2;i<=sqrt(10000000); i++){ if(prime[i]==i){
for(int j=i*i; j<=10000000; j+=i){ if(prime[j]==j) prime[j]=i; } } } } int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
//freopen("BAI604.INP","r", stdin);
//freopen("BAI604.OUT","w", stdout); sang(); cin>>n; for(int i=1; i<=n; i++) cout< return 0; }
Bài 46. Cho số nguyên dương n. Hãy tính tổng các bình phương các chữ số của n. 0BAI1.INP BAI1.OUT 125 30. vì 30= 1 2 +2 2 +5 2 Bài làm #include using namespace std; int n, ans=0; int main(){ cin>>n; while(n>0){ int r = n%10; ans += r*r; n /= 10; }
cout << ans << endl; return 0; }
Bài 47. Cho đa thức có dạng P(x) = a n n-1 n-2 n x +a n-1 x
+a n-2 x +.....+a 1 x +a 0
n là số nguyên dương, a i và x là các số nguyên. 1<=n<=10 và |x|<=20 và
|a i |<=1000. Hãy lập trình tính giá trị của P(x). BAI1.INP BAI1.OUT 3 2 (n=3, x=2) 20 1 2 1 2 ( các ai) Bai lam #include using namespace std;
long long luythua(int x, int n){ long long res = 1;
for(int i=1; i<=n; i++) res *= x; return res; } int main(){ int n, x; cin>>n>>x; long long ans=0; long long a; for(int i=n; i>=0; i--){ cin>>a; ans += a*luythua(x, i); }
cout << ans << endl; return 0; }
Bài 49. Một số tự nhiên được gọi là số siêu nguyên tố nếu bản thân nó là một số nguyên tố
tất cả cac số thu được bằng cách xóa lần lượt các chữ số bên phải của nó đều là số nguyên
tố. Ví dụ số 7331 là số siêu nguyên tố vì 7331, 733,73, 7 là những số nguyên tố.
Viết chương trình kiểm tra mỗi số có là số siêu nguyên tố thì in ra “yes”. Ngược lại in ra “ no”.
Với t là số lượng bộ test. 1<=t<=100. BAI1.INP BAI1.OUT 6 yes 23 yes 29 yes 37 yes 7331 yes 313 no 45 Bai lam #include using namespace std; int prime[1000001]; void sang(){
for(int i=0; i<=1000000; i++) prime[i]=1; prime[0]=prime[1]=0;
for(int i=2; i<=1000; i++){ if(prime[i]){
for(int j=i*i; j<=1000000; j+=i) prime[j]=0; } } } int tachso(int n){ n /=10; while(n>0){ if(prime[n]==0) return 0; n/=10; } return 1; } int main(){ sang(); int t; cin>>t; while(t--){ int n; cin>>n;
if( prime[n]&& tachso(n)) cout<<"yes"< else cout<<"no"< } return 0; }
Bai 51. Một số nguyên n được gọi là số đẹp nếu tồn tại ít nhất một số nguyên tố x sao cho
n chia hết cho x và n chia hết cho x 3 . ví dụ 48 là số đẹp vì x=2 là số nguyên tố mà 48 chia hết
cho 2 và cả 2 3 . cho số nguyên dương n, hãy kiểm tra xem n có phải là số đẹp hay không. 1<=n<= 10 16 BAI1.INP BAI1.OUT 125 Yes 12 No 928 Yes Bài làm #include using namespace std; bool check(long long n){
for(int i=2; i<=sqrt(n); i++){ if(n%i==0){ int mu = 0; while(n%i==0){ ++mu; n/=i; } if(mu>=3) return true; } } return false; } int main(){ long long n; cin>>n;
if(check(n)) cout<<"yes"< else cout<<"no"< return 0; }
Bài 63. Phân tích số n thành các thừa số nguyên tố. BAI1.INP BAI1.OUT 12 223 28 227 Bài làm Dạng 1. #include using namespace std; void phantich(int n){
for(int i=2;i<=sqrt(n); i++){ while(n%i==0){ cout< n/=i; } } if(n!=1) cout< } int main(){ int n; cin>>n; phantich(n); return 0; } Dạng 2. Khuyết số mũ BAI1.INP BAI1.OUT 12 23 28 27 16 2 Bài làm #include using namespace std; void phantich(int n){
for(int i=2;i<=sqrt(n); i++){ if(n%i==0){ cout< while(n%i==0){ n/=i; } } } if(n!=1) cout< } int main(){ int n; cin>>n; phantich(n); return 0; } Cach 2. BAI1.INP BAI1.OUT 108 2 3 1125 3 5 #include using namespace std; long long a; int main(){ cin>>a;
for(int i=2;i<=sqrt(a);i++){ if(a%i==0){ cout< while(a%i==0) a=a/i; } } if(a>1){ cout< } return 0; } Dạng 3. số mũ BAI1.INP BAI1.OUT 12 2 2 3 1 56 2 3 7 1 #include using namespace std; void phantich(int n){
for(int i=2;i<=sqrt(n); i++){ if(n%i==0){ int mu=0; while(n%i==0){ mu++; n/=i; } cout< } } if(n!=1) cout< } int main(){ int n; cin>>n; phantich(n); return 0; } Dạng 4. Nhân BAI1.INP BAI1.OUT 12 2*2*3 28 2*2*7 56 2*2*2*7 #include using namespace std; void phantich(int n){
for(int i=2;i<=sqrt(n); i++){ while(n%i==0){ cout< n/=i; if(n!=1) cout<<"*"; } } if(n!=1) cout< } int main(){ int n; cin>>n; phantich(n); return 0; } Dạng 5. Nhân mũ BAI1.INP BAI1.OUT 60 2^2*3^1*5 Bài làm #include using namespace std; void phantich(int n){
for(int i=2;i<=sqrt(n); i++){ if(n%i==0){ int mu=0; while(n%i==0){ mu++; n/=i; }
cout< if(n!=1) cout<<"*"; } } if(n!=1) cout< } int main(){ int n; cin>>n; phantich(n); return 0; }
Bài 64. Hãy đếm số lượng thừa số nguyên tố khác nhau trong phân tích thừa số nguyên tố
của 1 số nguyên dương. Với t bộ test . 1<=t<=100 và 1<=n<= 10 9
BAI1.INP BAI1.OUT 60 3 128 1 10000 2 Bài làm #include using namespace std; int phantich(int n){ int res=0;
for(int i=2;i<=sqrt(n); i++){ if(n%i==0){ res++; while(n%i==0){ n/=i; } } } if(n!=1) res++; return res; } int main(){ int t; cin>>t; for(int i=1;i<=t;i++){ int n; cin>>n; cout< } return 0; }
Bài 66. Một số nguyên dương N được gọi là số nguồn của số nguyên M nếu M là tổng
của
N với các chữ số của nó. Ví dụ: N 245 sẽ là số nguồn của số M 256 (vì
M 245 2 4 5 ). Có những số nguyên dương không có số nguồn và có số lại có nhiều số
nguồn. Ví dụ: số 7 thì không có số nguồn, còn số 216 có 2 số nguồn là 198 và 207.
Cho số nguyên dương M .Hãy tìm số nguồn nhỏ nhất của nó.
Yêu cầu: Nhập từ bàn phím số nguyên dương M (0 M 10000 ).Đưa ra kết quả màn hình số
nguồn nhỏ nhất của số M , nếu M không có số nguồn thi ghi “Khong co so nguon”. Ví dụ: Nhập vào Kết quả màn hình 7 Khong co so nguon 216 So nguon nho nhat la: 198 Bài làm #include using namespace std; int songuon(int n){ int tong=n; while(n>0){ int s=n%10; tong= tong +s; n/=10; } return tong; } int main(){ int n; int dem=0; cin>>n; for(int i=1; i<=n; i++){ if(songuon(i)==n){ dem++;
cout<<"so nguon nho nhat la:"<< i; break; } } if(dem ==1) cout;
else cout<<"khong co so nguon"; return 0; }
Bài 67. Hai số tự nhiên a và b được gọi là số nguyên tố tương đương nếu chúng có chung
các
ước số nguyên tố. Hãy viết chương trình nhập vào hai số và kiểm tra xem chúng có là
nguyên tố tương đương với nhau không. Ví dụ: 15 và 75 là hai số nguyên tố tương đương. Giải thích BAI1.INP BAI1.OUT 75 15
La hai so nguyen to tương duong 1125 2025
Giải thích: có hai ước nguyên tố là 3 và 5. Tích là 3.5 =15
3 n . 5 m và 3 k . 5 h là hai số nguyên tố tương đương Bài làm #include using namespace std;
long long t1=1,t2=1,a,b,d1,d2; int main(){ cin>>a>>b;
for(int i=2;i<=sqrt(a);i++){ if(a%i==0){ d1++; t1=t1*i; while(a%i==0) a=a/i; } } if(a>1){ d1++; t1=t1*a; }
for(int i=2;i<=sqrt(b);i++){ if(b%i==0){ d2++; t2=t2*i; while(b%i==0) b=b/i; } } if(b>1) { d2++; t2=t2*b;}
if(t1==t2&&d1==d2) cout<<"la hai so nguyen to tuong duong"; else cout<<"no"; return 0; }
Cách 2. Thu gon hơn . bỏ biến đếm #include using namespace std; long long t1=1,t2=1,a,b; int main(){ cin>>a>>b;
for(int i=2;i<=sqrt(a);i++){ if(a%i==0){ t1=t1*i; while(a%i==0) a=a/i; } } if(a>1){ t1=t1*a; }
for(int i=2;i<=sqrt(b);i++){ if(b%i==0){ t2=t2*i; while(b%i==0) b=b/i; } } if(b>1) { t2=t2*b;}
if(t1==t2) cout<<"la hai so nguyen to tuong duong" ; else cout<<"no"; return 0; }
Bài 72. Theo thứ tự các số 6, 8, 66,68, 86, 88, 666,... theo quan niệm là số lộc phát. Hãy tìm
số thứ n. Với n<=510.
BAI1.INP BAI1.OUT 1 6 102 866888 510 88888888 Bài làm #include using namespace std; int lp(int n){ while(n!=0){ int r=n%10;
if(r!=6 && r!=8) return 0; n/=10; } return 1; } int dem=0, a[1000]; int main(){ int n; cin>>n;
for(int i=1;i<=1000000000;i++){ if(lp(i)){ dem++; a[dem]=i; if(dem==n) break; // cout< } } cout < return 0; }
Bài 73. Các số 2,4,6,8,10,...n. được viết liền nhau thành số 246810121416....... hãy tìm chữ
số thứ n của số trên.
BAI1.INP BAI1.OUT 6 0 10 4 12 6 Bài làm #include using namespace std; string st; int n; int main(){ cin>>n; st=" "; for(int i=1; i<=n ; i++){ st=st + to_string(2*i); } cout << st[n]; return 0; }
Bài 74. Kiểm tra số thuận nghịch với nhiều test. N<=10 18 BAI1.INP BAI1.OUT 999999999999999999 yes 1234321 yes 10000 no Bài làm #include using namespace std; int tn(long long n){ long long m=n, res=0; while(n!=0){ res=res*10+ n%10; n/=10; } if(res==m) return 1; return 0; } int main(){ int t; cin>>t; long long n; while(t--){ cin>>n;
if(tn(n)) cout<<"yes"< else cout<<"no"< } return 0; } Cách 2. #include using namespace std; int tn1(string st){
long long l=0, r= (st.size()-1);
while(l if(st[l]!=st[r]) return 0; l++; r--; } return 1; } int main(){ int t; cin>>t; string s; while(t--){ cin>>s;
if(tn1(s)) cout<<"yes"< else cout<<"no"< } return 0; }
Bài 80. Trong cửa hàng có các loại thùng sơn 16kg,17kg và 21kg. Mô ‚t người khách cần
mua 185kg. Hãy chương để tính và cho biết cần bán cho người khách đó bao nhiêu mỗi loại
để không phải bán lẻ th•ng nào BAI1.INP BAI1.OUT 0 9 2 1 4 6 4 5 1 5 0 5 8 1 0 Bài làm #include using namespace std; int main() { for(int i=0;i<=185;i++){ for(int j=0;j<=185;j++){ for(int k=0;k<=185;k++){
if(((21*i)+(17*j)+(16*k))==185) cout< } } } return 0; }
Bài 82. Một số được gọi là số đẹp nếu nó là số thuận nghịch, có chứa ít nhất một chữ số
6
và tổng các chữ số của nó có chữ số tận c•ng là 8. Viết chương trình liệt kê và đếm xem
trong đoạn giữa hai số nguyên cho trước có bao nhiêu số đẹp như vậy BAI1.INP BAI1.OUT 1 500 161 1 Bài làm #include using namespace std; bool sodep(int n){ int m=n; int a, dao=0, dem=0, tong=0; while(n>0){ a=n%10; tong=tong +a; if(a==6)dem++; dao=dao*10 +a; n=n/10; }
if(dao==m&& dem>=1&& tong%10==8) return true; else return false; } int main(){ int demm=0, m, n; cin>>m>>n; for(int i=m; i<=n; i++){ if(sodep(i)==true){ demm++; cout< } } cout << endl; cout< return 0; }
Bài 83. Có N người được mời tham dự một cuộc triển lãm ra mắt sản phẩm mới của
một
công ty A, khách mời thứ i đăng ký đến vào thời điểm thứ xi ra về váo cuối thời điểm
thứ yi (xitính xem cần phải chuẩn bị ít nhất bao nhiêu chổ để các khách mời đến dự đều có chỗ ngồi
trong thời gian họ tham dự triển lãm.
- dòng đầu tiên ghíoos nguyên N là số lượng khách mời. 1<=N<=10 4
- dòng thứ i trong N dòng tiếp theo ghi hai số nguyên không âm xi, yi chỉ thời gian khách đến và ra về ( 0<=xiBAI1.INP BAI1.OUT 6 3
Số chỗ ngồi ít nhất cần chuẩn bị là . vì 1 2
- người thư nhất (đến thời điểm 1 về thời điểm 2) 2 5
- người thứ 2 đến thời điểm 2, về thời điểm 5 5 7
- người thứ 5 đến thời điểm 1, về thời điểm 3 6 7
Nên thời điểm thứ 2 cần 3 chỗ ngồi( các thời điểm 1 3 còn lại có thể ít hơn) 9 11 Bài làm #include using namespace std; int N,x,y,i,j,res=0,cnt[2005]; int main(){ cin>>N; for(i=1;i<=N;i++){ cin>>x>>y; for(j=x;j<=y;j++){ cnt[j]++; res=max(res,cnt[j]); } } cout << res; return 0; }
Bài 89. Một số gọi là số đẹp nếu tổng các ước của nó là số nguyên tố. BAI1.INP BAI1.OUT 2211169 yes 2505889 yes 1234567891234567 no 6 co : 1+2+3+6 #include using namespace std; bool nt(int n){ if (n<2) return false;
for (int i=2;i<=sqrt(n);i++){ if (n%i==0) return false; } return true; } int check(long long n){ long long sum=0;
for(int i=1; i<=sqrt(n);i++){
if(n%i==0){if(i!=n/i) sum+=i+n/i; else sum+=i; } } if(nt(sum)) return true; return 0; } int main(){ long long n; cin>>n;
if(check(n)==true) cout<<"yes"; else cout<<"no"; return 0; }
Bài 90. Một số gọi là số đẹp nếu tổng các ước của nó là số chinh phuong.voi n<=10 16 BAI1.INP BAI1.OUT 100011559 yes 1234567891234567 no 6 co : 1+2+3+6 Bai lam #include using namespace std; bool scp(long long n){ int m=sqrt(n); if(m*m==n)return true; return false; } int check(long long n){ long long sum=0;
for(int i=1; i<=sqrt(n);i++){
if(n%i==0){if(i!=n/i) sum+=i+n/i; else sum+=i; } } if(scp(sum)) return true; return 0; } int main(){ long long n; cin>>n;
if(check(n)==true) cout<<"yes"; else cout<<"no"; return 0; }
Bài 91. Hai số gọi là số đẹp nếu chúng có số lượngcác ước bằng nhau. Cho đoạn k, m
hãy
đếm xem trong đoạn đó có bao nhiêu cặp số đẹp. n<=1200 BAI1.INP BAI1.OUT 2 1000 85048 1 1200 121295 Bai lam #include using namespace std; int check(long long n){ int dem=0;
for(int i=1; i<=sqrt(n);i++){
if(n%i==0){if(i!=n/i)(dem++)+(dem++); else dem++; } } return dem; } int main(){ long long k, m; long long res=0; cin>>k>>m;
for(int i=k;i for(int j=i+1;j<=m;j++){ if(check(i)==check(j)) res++; } } cout< return 0; } Bài 92. #include using namespace std; long long n; struct pt{ long long d,c,vt; }; bool cmp(pt x,pt y){ if(x.c>y.c) return true;
if(x.c==y.c&&x.vt return true; return false; } pt a[100068]; int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n; mapd; mapkt; int j=0;
for(long long i=1;i<=n;i++){ a[i].vt=0; }
for(long long i=1;i<=n;i++){ cin>>a[i].d; d[a[i].d]++; if(d[a[i].d]==1){ j++; kt[a[i].d]=j; } }
for(long long i=1;i<=n;i++){ if(a[i].vt==0) a[i].vt=kt[a[i].d]; }
//for(long long i=1;i<=n;i++){ // cout< //} //cout<<'\n';
for(long long i=1;i<=n;i++){ a[i].c=d[a[i].d]; } sort(a+1,a+n+1,cmp);
for(long long i=1;i<=n;i++){ cout< } }
Bài 93. Cho số n hãy tìm số lớn nhất trong n sau khi đã xóa đi k chữ số. N<=10 6 và k BAI1.INP BAI1.OUT 19873 987 2 Bài làm #include using namespace std; int solonnhat(int n,int k){ string num=to_string(n); if(k>=num.length()){ return 0; } for(int i=0;i int j=0; while(j=num[j+1]){ j++; } num.erase(num.begin()+j); } return stoi(num); } int main(){ int n,k; cin >>n>>k; int res=solonnhat(n,k); cout< return 0; }
Bài 93b. Cho số n hãy tìm số nho nhất trong n sau khi đã xóa đi k chữ số. N<=10 6 và k BAI1.INP BAI1.OUT 2655913 3 2513 #include using namespace std; int sonhonhat(int n,int k){ string num=to_string(n); if(k>=num.length()){ return 0; } for(int i=0;i int j=0; while(j j++; } num.erase(num.begin()+j); } return stoi(num); } int main(){ int n,k; cin >>n>>k; int res=sonhonhat(n,k); cout< return 0; }
Bài 94. Đếm số ước của một số nguyên dương. Voi n<=10 15 BAI1.INP BAI1.OUT 100000000000 144 121 3 Bài làm #include using namespace std; long long n; int dem=0; int main(){ cin>>n;
for(int i=1; i<=sqrt(n);i++){
if(n%i==0){if(i!=n/i)(dem++)+(dem++); else dem++; } } cout<< dem ; return 0; }
Bài 95. hai số gọi là số đẹp nếu số các ước của nó bằng nhau. N<=10 15
Ví dụ. 121 là số có 3 ước là 1, 11,121 BAI1.INP BAI1.OUT 121 361 Yes 11 19 Yes Bài làm #include using namespace std; int check(long long n){ int dem=0;
for(int i=1; i<=sqrt(n);i++){
if(n%i==0){if(i!=n/i)(dem++)+(dem++); else dem++; } } return dem; } long long a, b; int main(){ cin>>a>>b;
if(check(a)==check(b)) cout<<"yes"; else cout<<"no"; return 0; } Bài 4 đề Quảng xương #include #include using namespace std; int codi(int x){ int dem=0; for(int i=1;i<=x;i++){ if (x%i==0){ dem++; } } return dem; } int demcodi(int L, int R){ vector codiSequence; codiSequence.push_back(1); for (int i = 1; ; i++) {
int nextElement=codiSequence[i-1]+codi(codiSequence[i-1]); if(nextElement>R){ break; }
codiSequence.push_back(nextElement); } int dem=0;
for(int element:codiSequence){
if (element>=L&&element<=R){ dem++; } } return dem; } int main() { int T;cin>>T; while(T--){ int L,R; cin>>L>>R; int res=demcodi(L,R); cout< } return 0; }
Bài 97. An mua được 2 túi kẹo. Túi thứ nhất có x (x>=1) cái và túi thứ 2 có y (y>=1) cái .
không may an đã lỡ làm mất túi thứ nhất và không nhớ trong túi thứ nhất có bao nhiêu cái kẹo.
Cậu chỉ nhớ được tổng số kẹo không vượt quá n và chia hết cho k. Các bạn hãy giúp An tính
xem có thể có bao nhiêu cái kẹo có trong túi thứ nhất để mua bổ xung
Nếu có khả năng thì in ra tất cả theo thứ tự tăng dần. Nếu không biết số kẹo thì in ra -1.
Một dòng duy nhất chứa 3 số nguyên y, k, n. 1<=y,k,n<=10 9 và n/k<=10 5 BAI1.INP BAI1.OUT 10 1 10 -1 10 6 40 2 8 14 20 26 Bài làm #include using namespace std; int y, k, n; int dem=0; int main(){
cin >>y>>k>>n;
if(y+1>n) cout<<"-1";
else {for(int i=1;i<=n;i++){
if((y+i)%k==0&&((y+i)<=n)){ dem++; cout< } } if(dem==0) cout<<"-1"; } return 0; }