【c++实验六】

1.列出完数

自然数中,完数寥若是星,请在从1到某个整数范围中打印出所有的完数来。所谓“完数”是指一个数恰好等于它的所有不同因子之和。例如,6是完数,因为6-1+2+3。而24不是完数,因为  24*1+2+3+4+6+8+12=36.

输入数据中含有一些整数n(1<n<10000)。

对于每个整数n,输出所有不大于n的完数。每个整数n的输出由n引导,跟上冒号,然后是由空格开道的一个个完数,每个n的完数列表应占独立的一行。

 Input:  100

 Output:  100:6 28

2.12!配对

找出输入数据中所有两两相乘的积为12!的个数。

输入数据中含有一些整数n(1sn<2^32)。 输出所有两两相乘的积为12!的个数。  Input:

1 10000 159667200 9696 38373635

Sample Output:  2

3.整数的因子数

找出整数的所有因子数。一个整数n的因子数为包含它自身的所有因子的个数。例如:12的因子数为6(1,2,3,4,6,12)。

Output:

对于每个n,列出其所有因子数,每个n加上冒号单独列一行。  Sample Input:

11 22 33 24

Sample Output:

 11:2

22:4

33:4

24:8

4.Semi-Prime

一个大于1的整数称为素数,如果它的唯一正因子(因子)是一个和它本身。例如,2,1167,89是素数,而8,20,27不是。

Input:

3

4

6

12

Output:

No

Yes

Yes

No

 

一个大于1的整数被称为半素数,如果它可以分解成两个素数。例如,б是半素数,但12不是。

 

你的任务只是确定一个给定的数字是否是一个半素数.

  • 实验内

1.#include<iostream>

using namespace std;

void change(int n)

{

        for (int i = 1; i < n; i++)

        {

            int sum = 0; //每次循环sum都会重置

            for (int j = 1; j < i; j++)

                if (i % j == 0)

                {

                    sum += j;  //内层循环用于因数累加

                }

            if (sum == i)  //判断是否为完数

                cout << i << " ";

        }

        cout << endl;

    

}

int main()

{

    int n;

 

    while (cin >> n) {

        change(n);

    }

    

    return 0;

}

2.

  #include<iostream>

using namespace std;

class suanfa

{

public:

    void set_number();

    void show_number();

};

int sum12(int i)

{

    int f12 = i;

    if (i > 1)

        f12 = f12 * sum12(i - 1);

    return f12;  //f12 用来计算12!(仅当i等于12)

}

int main()

{

    long int i = 1;

    long j, k = 0, f12 = 1;

    long int a[10000];  //用来存储输入数据

    f12 = sum12(12);

    i = 0;

   

    while (cin>>a[i])  //该循环需要通过快捷键ctrl+z进行终止

    {

        for (j = 0; j < i; j++)

        {

            if (a[i] * a[j] == f12)

            {

                k++;

            }

        }

        i++;

    }

    cout << k << endl;

    system("pause");

 

    return 0;

}

void suanfa::set_number()

{

 

}

void suanfa::show_number()

{

 

}

 

3.

#include<iostream>

using namespace std;

class suanfa

{

public:

    void input();

     void ending();

};

int main()

{

    suanfa s1;

    s1.input();

    s1.ending();

    return 0;

}

 

void suanfa::input()

{

    int n;

    int sum = 0;

    int w = 0;

 

    while (cin >> n)

    {

 

        for (int i = 1; i <= n; i++)

        {

 

            if (n % i == 0)

                sum++;

        }

        cout << n << ":" << sum << endl;

        sum = 0;   //结果重置

 

    }

}

void suanfa::ending()

{

    system("pause");

}

4.#include<iostream>

using namespace std;  //待修改

bool isprime(int a)

{

      if (a == 1) return false;

    for (int i = 2; i < a; i++)

    {

        if (a % i == 0)return false;

 

    }

    return true;

}

 

int main()

{

    int n;

    while (cin >> n&&n!=0)

    {

        for (int i = 2; i < n; i++)

            if (isprime(i) && n % i == 0)

            {

                int j;

                j = n / i;

                if (isprime(j))

 

                {

                    cout << "Yes";

                    return 0;

                }

 

            }

        cout << "No";

 

    }

    return 0;

}

 

#include<iostream>

using namespace std;  //待修改

bool isprime(int shu)

{

    int i;

    for (i = 2; i <= sqrt(shu); i++)

    {

        if (shu % i == 0)return false;

    }return true;

}

bool panduan(int u)

{

    int j;    for (j = 2; j < u; j++)

    {

        if (u % j == 0 && isprime(j))

        {

            int w;

            w = u / j;

            if (isprime(w)) return true;

        }

    }

    return false;

 

}

 

int main()

{

    int n;

    while (cin >> n && n != 0)

    {

        if (panduan(n)) cout << "Yes" << endl;

        else cout << "No" << endl;

 

            }

    return 0;

 

    }

   

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值