这次是函数+数论+递归
目录:
No.2 B2128 素数个数
第一题:B2127 求正整数 2 和 n 之间的完全数
题目描述
求正整数 2 和 n 之间的完全数(一行一个数)。
完全数:对于一个自然数,所有比它小的所有因数之和,等于它本身,它就是个完全数。如 6=1+2+3。
输入格式
输入 n(n≤10000)。
输出格式
一行一个数,按由小到大的顺序。
输入输出样例
输入 #1
10
输出 #1
6
输入 #2
100
输出 #2
6 28
思路:
定义一个判断完全数的函数......太简单了没什么好讲的
AC代码:
#include<bits/stdc++.h>//万能库
using namespace std;//cin,cout
bool isPerfectNumber(int n)//完全数的函数
{
int sum=0;//因数的和
for(int i=1;i<n;i++)//注意不是≤n
{
sum+=n%i==0?i:0;//三元biao达式
}
return sum==n;//如果等于n就是,否则不是
}
int main()//main函数
{
int n;//定义变量
cin >> n;//输入
for(int i=2;i<=n;i++)//题目中写的从2~n
{
if(isPerfectNumber(i))//是完全数
{
cout<<i<<'\n';//输出,注意不要忘记换行
}
}
return 0;//“愉快”的结束
}
第二题:B2128 素数个数
题目描述
编程求 2 ~ n(n 为大于 2 的正整数)中有多少个素数。
输入格式
输入 n(2≤n≤50000)。
输出格式
素数个数。
输入输出样例
输入 #1
10
输出 #1
4
思路:
定义判断质数的函数.....然后一个循环......
AC代码:
#include<bits/stdc++.h>//万能库
using namespace std;//cin,cout
bool isPrime(int n)//质数的函数
{
for(int i=2;i<=n/i;i++)//不用讲吧
{
if(n%i==0)//能整除
{
return 0;//不是质数直接退出
}
}
return n>=2;//小于2的数不是质数!!!
}
int main()//main函数
{
int n;//定义变量
cin >> n;//输入
int cnt=0;//定义计数器
for(int i=2;i<=n;i++)//题目中写的从2~n
{
if(isPrime(i))//是质数
{
cnt++;//计数器递增
}
}
cout<<cnt;//输出
return 0;//“愉快”的结束
}
第三道:B2144 阿克曼(Ackermann)函数
题目描述
阿克曼(Ackermann)函数 A(m,n) 中,m,n 定义域是非负整数(m≤3,n≤10),函数值定义为:
akm(m,n)=n+1;(m=0 时)。
akm(m,n)=akm(m−1,1);(m>0、n=0 时)。
akm(m,n)=akm(m−1,akm(m,n−1));(m,n>0 时)。
输入格式
m 和 n。
输出格式
函数值。
输入输出样例
输入 #1
2 3
输出 #1
9
思路:
弄个递归函数就行(各位有没有知道ACK4 3=几的?我都写了10几张纸了还是乱码)
AC代码:
#include<bits/stdc++.h>//万能库
using namespace std;//cin,cout
int ACK(int m,int n)//阿克曼函数
{
if(!m)//m=0
{
return n+1;//返回n+1
}
else if(!n)//n=0
{
return ACK(m-1,1);//返回ACK(m-1,1);
}
else//n,m>0
{
return ACK(m-1,ACK(m,n-1));//返回ACK(m-1,ACK(m,n-1))
}
}
int main()//main函数
{
int m,n;//定义变量
cin >> m >> n;//读入数据
cout<<ACK(m,n);//输出
return 0;//“愉快”的结束
}
这篇博客就到这里啦,我们下篇博客见!