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;
}