求方程的正整数解
【描述】编写程序,求X^2 + Y^2 = n 的正整数解,n为从键盘上输入的一个正整数。
【输入】输入数据占一行,为一个正整数n,10<=n<=10000
【输出】对输入的正整数,输出所有的解,格式如样例输出为例,如果没有解,则输出no answer。
【样例输入1】2000
【样例输出1】
2000=88+44 44
2000=2020+40 40
2000=4040+20 20
2000=4444+8 8
【样例输入2】1999
【样例输出2】no answer
cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,x,y;
cin>>n;
int m = sqrt(n); //循环变量x和y的终值
bool flag = false;//取值为true表示有解,取值为false表示无解
for(x=1;x<=m;x++)//x从1枚举到m
{
for(y=1;y<m;y++)//y从1枚举到m
{
if(x*x + y*y == n)
{
flag = true;
cout<<n<<"="<<x<<"*"<<x<<"+"<<y<<"*"<<y<<endl;
}
}
}
if(!flag) cout<<"no answer"<<endl;//无解
return 0;
}
/*
【输入用例3】
2025
【输出用例3】
2025=27*27+36*36
2025=36*36+27*27
【输入用例4】
6666
【输出用例4】
no answer
【输入用例5】
7696
【输出用例5】
7696=36*36+80*80
7696=60*60+64*64
7696=64*64+60*60
7696=80*80+36*36
【输入用例6】
9999
【输出用例6】
no answer
*/
即是平方数也是立方数
【描述】64这个数即使平方数(82)也是立方数(43),现在想知道,对于给定的正整数n,
1~n范围内有多少个这种数。
【输入】输入占一行,为一个整数n
【输出】输出占一行,为求得的答案
【样例输入】100
【样例输出】
1
64
cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n, k;
cin >>n;
int cnt =0;
for(k=1; k*k*k*k*k*k<=n;k++)
{
cnt++;
if(k*k*k*k*k*k<=n)
{
cout<<k*k*k*k*k*k<<endl;
}
}
//cout<<cnt<<endl;
return 0;
}
/*
【输入用例2】
10
【输出用例2】
1
64
【输入用例3】
50
【输出用例3】
1
【输入用例4】
150
【输出用例4】
1
64
【输入用例5】
1000
【输出用例5】
1
64
729
*/
分解质数
【描述】1742年,德国数学家哥德巴赫提出了著名的哥德巴赫猜想,任何一个不小于4的偶数都可以表示为两个质数之和。编写程序,将一个不小于4的偶数分解成两个质数之和,并输出所有的分解形式。
【输入】输入数据占一行,为一个偶数n,4<=n<=2^10。
【输出】对输入的偶数,输出所有的分解形式,样式输出如下所示
【样例输入】
34
【样例输出】
34=3+31
34=5+29
34=11+23
34=17+17
cpp
#include<bits/stdc++.h>
using namespace std;
int prime(int m) //判断m是否为质数,如果是质数,返回1否则返回0
{
int i, k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0) break;//如果i能整除m,提前退出循环
if(i>k) return 1; //m为质数
else return 0; //m为合数
}
int main() {
int n,a,b;
cin>>n;//输入一个偶数
if(n==4)
{
cout<<"4 = 2 + 2"<<endl; return 0;
}
for(a=3;a<=n/2;a=a+2)//从a=3开始,每次递增2,跳过偶数
{
if(prime(a))
{
b=n-a;
if(prime(b))
cout<<n<<"="<<a<<"+"<<b<<endl;//找到一个分解
}
}
return 0;
}
/*
【输入用例2】
20
【输出用例2】
20=3+17
20=7+13
【输入用例3】
60
【输出用例3】
60=7+53
60=13+47
60=17+43
60=19+41
60=23+37
60=29+31
【输入用例4】
76
【输出用例4】
76=3+73
76=5+71
76=17+59
76=23+53
76=29+47
【输入用例5】
88
【输出用例5】
88=5+83
88=17+71
88=29+59
88=41+47
【输入用例6】
100
【输出用例6】
100=3+97
100=11+89
100=17+83
100=29+71
100=41+59
100=47+53
*/
特殊的数
【描述】给出若干个整数,询问其中是否有一对数的和等于给定的数
【输入】共三行:第一行是整数n,表示有n个整数;第二个是n个整数;第三个是一个整数m,表示需要得到的和。
【输出】若存在和为m的数对,输出两个整数,小的在前,大的在后,中间用单个空格隔开。若有多个数满足条件,选择数对中较小的数最小组合。若找不到符合要求的数对,输出no。
【样例输入】
4
2 5 1 4
6
【样例输出】
1 5
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
int i,j,n,a[100010],m;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
cin>>m;
sort(a,a+n);//把a中的数按从小到大排序
for(i=0;i<n;i++)
{
for(j=j+1;j<n;j++)
{
if(a[i]+a[j]==m){
cout<<a[i]<< " "<<a[j]<<endl; return 0;
}
}
}
cout<<"NO"<<endl;
return 0;
}
/*
【输入用例2】
4
2 5 3 4
7
【输出用例2】
2 5
【输入用例3】
5
2 5 3 4 6
8
【输出用例3】
2 6
【输入用例4】
6
2 5 3 4 6 1
8
【输出用例4】
NO
【输入用例5】
7
2 5 3 4 6 1 8
9
【输出用例5】
1 8
*/