判断素数

任务描述

本关任务:输入两个正整数m和n( $1\leq m \leq n\leq 100$ ),编写一个程序,统计并输出m~n之间(包含m和n)的素数的个数。

编程要求

定义并调用函数 isPrime(n) 来判断n是否是素数。

测试说明

平台会对你编写的代码进行测试:

测试输入:1 10; 预期输出: 4

测试输入:40 50; 预期输出: 3

提示: 对于数n,判断它是否是素数,不必枚举 [2,n-1] 之间的数,只需要枚举[2, $\sqrt n$ ]之间的数即可。

参考代码

#include<iostream>
using namespace std;

bool isPrime(int n)
{
    /** Begin **/
    if (n == 1) return false;
    for (int i=2;i*i<=n;i++) if (n%i==0) return false;
    return true;
    /**  End  **/
}

int main()
{
    int m, n;
    cin >> m >> n;

    /** Begin **/
    int ans = 0;
    for (int i=m;i<=n;i++) ans += isPrime(i);
    cout << ans << endl;

    /**  End  **/
    return 0;
}

完全数

任务描述

完全数(perfect number),又称为完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。例如:28是一个完全数,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加:1+2+4+7+14=28.

编写程序,输入两个正整数m和n( $1\leq m\leq n\leq 10000$ ),输出m ~ n之间(包含m和n)的所有完全数。如果m ~ n之间没有完全数,则输出-1.

编程要求

定义并调用函数 perfectNumber(n) 判断 n 是否是完全数。

测试说明

平台会对你编写的代码进行测试:

测试输入:100 10000; 预期输出: 496 8128

测试输入:100 200; 预期输出: -1

参考代码

#include<iostream>
using namespace std;

bool perfectNumber(int n)
{
	/** Begin **/
    int sum = 0;
    for (int i=1;i<n;i++) if (n%i==0) sum += i;
    return sum == n;
    /**  End  **/
}

int main()
{
    int m, n;
    cin >> m >> n;
    /** Begin **/
    int f = 0;
    for (int i=m;i<=n;i++) {
        if (perfectNumber(i)) cout << i << " ", f = 1;
    }
    if (!f) cout << -1;
    /**  End  **/

    return 0;
}

冰雹猜想

任务描述

给出一个正整数 n $(n\leq 100)$ ,然后对这个数字一直进行下面的操作:如果这个数字是奇数,那么将其乘 3 再加 1,否则除以 2。经过若干次循环后,最终都会回到 1。经过验证,很大的数字( $7\times10^{11}$ )都可以按照这样的方式变成 1,所以被称为“冰雹猜想”。例如:当 n 是 20,变化的过程是 [20, 10, 5, 16, 8, 4, 2, 1]; 而当 n 是 1 的时候,变化的过程是 [1].

根据给定的数字 n,验证这个猜想,即输出整个变化序列。

编程要求

定义并调用函数 valid(n),输出“冰雹猜想”的整个变化序列。

测试说明

平台会对你编写的代码进行测试:

测试输入:20 预期输出: 20 10 5 16 8 4 2 1

测试输入:68 预期输出: 68 34 17 52 26 13 40 20 10 5 16 8 4 2 1

参考代码

#include<iostream>
using namespace std;

void valid(int n)
{
    /** Begin **/
    cout << n << " ";
    while (n>1) {
        cout << (n=n%2?3*n+1:n/2) << " ";
    }
    /**  End  **/
}

int main()
{
    int n;
    cin >> n;
    valid(n);
    return 0;
}

统计正整数中指定数字的个数

任务描述

从键盘输入一个正整数 number,求其中含有指定数字 digit 的个数。

例如:从键盘输入正整数 number=1222 ,若 digit=2 ,则 1222 中含有 3 个 2

编程要求

用函数实现,函数原型为:int CountDigit(int number,int digit)

测试说明

平台会对你编写的代码进行测试:

测试输入:1222 2; 预期输出:3

测试输入:1234 6; 预期输出:0

参考代码

#include<iostream>
using namespace std;

int CountDigit(int number,int digit)
{
    /** Begin **/
    int ans = 0;
    while (number) ans += (number%10==digit), number/=10;
    return ans;
    /**  End  **/
}

int main()
{
    int number, digit;
    cin >> number >> digit;
    cout << CountDigit(number,digit) <<endl;

    return 0;
}