题目61:亲和数
古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为: 1+2+4+5+10+11+20+22+44+55+110=284。 而284的所有真约数为1、2、4、71、 142,加起来恰好为220。人们对这样的数感到很惊奇,并称之为亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。
你的任务就编写一个程序,判断给定的两个数是否是亲和数。
请定义一个函数,传入一个数n,返回n的所有真约数之和。
输入数据第一行包含一个数M,接下来有M行,每行一个实例,包含两个整数A,B; 其中 0 <= A,B <= 600000
对于每个测试实例,如果A和B是亲和数的话输出YES,否则输出NO。
总结:
func() 函数求一个数的真约数之和,对每一组测试数据,判断 func(a) == b && func(b) == a,若相等,则这两个数是亲和数
cpp
#include <stdio.h>
int func(int n){
int sum = 0;
for(int i = 1; i < n; i++){
if(n % i == 0){
sum += i;
}
}
return sum;
}
int main(){
int m;
scanf("%d", &m);
for(int i = 0; i < m; i++){
int a, b;
scanf("%d %d", &a, &b);
if(func(a) == b && func(b) == a)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
题目62:分拆素数和
把一个偶数拆成两个不同素数的和,有几种拆法呢?
说明:比如10,可以拆成3+7和5+5以及7+3,但是3+7与7+3相同,只算一种,5+5由于两个素数相同,不计算在内。因此,10的拆法只有一种。
首先输入一个T(不超过500),然后输入T个正的偶数,其值不会超过10000。
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
总结:
-
is_su() 函数判断一个数是不是素数
-
对于测试数据 a,令 j 从2遍历到 a / 2(两个不同素数不同顺序相加只算一种,故只需遍历到 a / 2,又相同素数相加两次的情况不计算在内,故 a / 2取不到),若 j 为素数,则判断 a - j是否为素数,若为素数则count++,循环结束输出count
cpp
#include <stdio.h>
int is_su(int n){ //判断一个数是否为素数
int i;
if(n < 2)
return 0;
for(i = 2; i < n; i++){
if(n % i == 0)
return 0; //n不为素数
}
return 1; //n为素数
}
int main(){
int t;
scanf("%d", &t);
for(int i = 0; i < t; i++){
int count = 0, a;
scanf("%d", &a);
for(int j = 2; j < a / 2; j++){
if(is_su(j)){
int num = a - j;
if(is_su(num))
count++;
}
}
printf("%d\n", count);
}
return 0;
}
题目63:歌德巴赫猜想
歌德巴赫猜想指出:任何一个大于2的偶数,都可以表示成两个素数的和。例如:8 = 3+5, 44 = 13+31等。试编程在6至100范围内验证歌德巴赫猜想。
先输入一个正整数n,表示有n组测试数据。所有数据前后没有多余的空行,两组数据之间也没有多余的空行。每组输入数据由一行组成,在接下来的n行中,每行有1个偶数a(6≤a≤100),在行首和行尾没有多余的空格。
对于每组输入,输出满足歌德巴赫猜想两个素数,小的素数的在前,在行首和行尾没有多余的空格。如果有多组结果,输出的第一个素数要求最小。所有数据前后没有多余的空行,两组数据之间也没有多余的空行。
总结:
对于测试数据 a,令 j 从2遍历到 a / 2,若 j 为素数,则判断 a - j是否为素数,若为素数则输出 j 和 a - j,结束循环(只需输出一对满足条件的,且要求输出的第一个素数最小)
cpp
#include <stdio.h>
int is_su(int n){ //判断一个数是否为素数
int i;
if(n < 2)
return 0;
for(i = 2; i < n; i++){
if(n % i == 0)
return 0; //n不为素数
}
return 1; //n为素数
}
int main(){
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++){
int a;
scanf("%d", &a);
for(int j = 2; j <= a / 2; j++){
if(is_su(j)){
int num = a - j;
if(is_su(num)){
printf("%d %d\n", j, num);
break;
}
}
}
}
return 0;
}

翻译:
RFID和电子标签或RFID标签一起应用在任意物品被监视或追踪时。这个标签可能应用在任何物品上,例如商品,工具,智能手机,电脑,动物或者人。这个目的是用无线电波或传感信号确认和追踪物品。一些标签可以通过无线阅读器从几十米或者几百米外被读。大多数RFID标签包含至少两个主要部分。一个是集成电路,为了存储和处理信号的,调制和解调射频(RF)信号和其他功能。另一部分是天线,为了接收和发送无线电信号。
现在的传感器网络大多是无线的,被称为无线传感器网络(WSNs)。典型的WSN由空间分布的自主传感器组成,为了协作监视物理或环境条件,例如温度,声音,震动,压力,运动或污染物。无线传感器网络发展的动机是军事应用,例如战场监视。WSN技术现在被用于很多工业和民用应用领域,包括过程监视和控制,机器健康监视,环境和栖息地监视,医疗保健家庭自动化和智能交通控制。
GPS是由美国空军于1973年开发的。同样的发展也发生在欧盟,俄罗斯和中国。从1994年以来,退化的GPS在提供可靠的位置,导航和计时服务上已可用于民用。对于任何有GPS接收器的人,在世界任何地方,无论什么天气,无论白天黑夜,系统将会提供准确的位置和时间信息给无限数量的用户。
单词:
