62.分拆素数和

问题描述

把一个偶数拆成两个不同素数的和,有几种拆法呢?

说明:

比如10,可以拆成3+7和5+5以及7+3,

但是3+7与7+3相同,只算一种,5+5由于两个素数相同,不计算在内。

因此,10的拆法只有一种。

个人总结

先写一个判断素数的函数,注意 i <= sqrt(x),不能落下“=”。从2到a/2循环,且取不到a/2,就不会出现重复的拆法,且两个素数相同的情况也排除了。然后判断 (isPrime(i) and isPrime(a-i)),如果满足,就加一种拆法。

#include <bits/stdc++.h>
using namespace std;

bool isPrime(int x){
    if (x<=1) return false;
    if (x==2) return true;
    if (x%2==0) return false;
    for (int i = 3; i <= sqrt(x); i+=2) {  //<=,“=”不能落下,落下就出现错误,比如9
        if (x%i==0) return false;
    }
    return true;
}

int main()
{
    int T;
    cin>>T;
    while (T--){
        int a;
        cin>>a;
        int cnt=0;
        for (int i = 2; i < a/2; ++i) {
            if (isPrime(i) and isPrime(a-i)){
                cnt++;
            }
        }
        cout<<cnt<<endl;
    }
    return 0;
}


63.哥德巴赫猜想

问题描述

歌德巴赫猜想指出:任何一个大于2的偶数,都可以表示成两个素数的和。例如:8 = 3+5, 44 = 13+31等。试编程在6至100范围内验证歌德巴赫猜想。

个人总结

同样先写一个判断素数的函数。然后还是从2到a/2循环,这次可以取到a/2,如6=3+3。要求如果有多组结果,输出的第一个素数要求最小。所以只要有满足 (isPrime(i) and isPrime(a-i)),就输出i和a-i两个数,并跳出循环即可。

#include <bits/stdc++.h>
using namespace std;

bool isPrime(int x){
    if (x<=1) return false;
    if (x==2) return true;
    if (x%2==0) return false;
    for (int i = 3; i <= sqrt(x); i+=2) {
        if (x%i==0) return false;
    }
    return true;
}

int main()
{
    int n;
    cin>>n;
    while (n--){
        int a;
        cin>>a;
        for (int i = 2; i <= a/2 ; ++i) {
            if (isPrime(i) and isPrime(a-i)){
                cout<<i<<" "<<a-i<<endl;
                break;
            }
        }
    }
    return 0;
}


64.N的倍数

问题描述

明明的爸爸在研究一个复杂的数学问题,研究了很长时间都没有结果。明明看见后就问爸爸在研究什么。明明的爸爸回答说:“我在研究一个整数的倍数问题,想找到某个数的倍数……”明明还没有等他爸爸说完,就抢着说:“这不是很简单嘛,你把这个整数乘以1,乘以2,……,就能得到很多的倍数呀。”明明的爸爸当然知道这种方法,但是他接着说:“这样的方法找倍数当然容易,但是我找的倍数有一个特点,那个倍数只能由0或1组成,且应该尽量的小。例如一个自然数2,它符合要求的那个倍数就是10。”这下明明明白为什么爸爸研究了那么多时间都还没有研究出结果了,因为随着数字的增大,找到它的符合要求的倍数越来越难。明明想帮他爸爸解决这个问题,于是他来求助于你,能否帮他爸爸写一个程序,来求一个整数的倍数,倍数仅有0或1组成,且要尽可能小。 明明的问题可以归结为:任意给定一个自然数N,寻找一个M,要求M是N的倍数,且它的所有各位数字都是由0或1组成,并要求M尽可能小。

个人总结

先写一个判断一个数是否由0或1组成的函数,一开始写成了 if((char)k != '0' and (char)k != '1'),这是错误的,如果要将数字0-9转字符,k+‘0’即可,而本题直接整数间比较就可以了,但也发现了自己的一个误区。主程序中,n分别乘1,乘2,...,直到第一个满足条件的倍数就是m。

#include <bits/stdc++.h>
using namespace std;

//判断一个数是否由0或1组成
bool func(int n){
    int k;
    while (n>0){
        k = n % 10;
        if (k!=0 and k!=1){
            return false;
        }
//        法2:数字0-9 转 字符 再比较,也可以
//        if ((k+'0')!='0' and (k+'0')!='1'){
//            return false;
//        }

        //不能写成if((char)k != '0' and (char)k != '1')
        //例如,(char)9是把整数9强制转换成字符类型,得到的是ASCII码为9的字符,而不是字符‘9’
        n /= 10;
    }
    return true;
}

int main()
{
    int n;
    while (cin>>n){
        int m=1;
        while (true){
            if (func(n*m)){
                cout<<n*m<<endl;
                break;
            }
            m++;
        }
    }
    return 0;
}


计算机英语刘艺第五版unit12 英语翻译

       图12B-1:AR使用人类用户和计算机系统之间的反馈循环。用户观察AR显示并且控制视角。系统追踪用户的视角,将现实世界的姿态与虚拟内容进行配准,并且呈现情境可视化。

       三、应用例子

       在这个章节中,我们通过审查一些例子来继续探索AR,其中不仅展示了AR技术,还展示了该技术的应用。除了以下例子外,还存在许多其他具体的应用可能性,比如AR用于工厂和建筑,xx,导航和游戏。

       1.维护和训练

       理解事物是如何工作的,并学习如何聚集、分散或修理它们,在许多职业中都是一个重要的挑战。维护工程师经常花大量时间学习xx和文件,因为记住所有流程的细节几乎是不可能的。然而,AR可以把提供指导,直接添加到工人的视野范围。这可以提供更有效的训练,但更重要的是,它允许缺乏训练的人也能正确地完成工作。

AI翻译对比

       图12B-1:AR利用人类用户与计算机系统之间的反馈循环。用户观察AR显示并控制视角。系统追踪用户的视角,将现实世界中的姿态与虚拟内容进行配准,并呈现情境化的可视化内容。

       III. 应用示例

       在本节中,我们将通过考察几个示例来继续探索 AR,这些示例展示了 AR 技术及其应用。除了以下示例外,还存在许多其他具体的应用可能性,例如用于工业和建筑、外科手术、导航以及游戏的 AR。

       1. 维护与培训

       理解事物的工作原理,并学习如何组装、拆卸或修理它们,是许多职业面临的重要挑战。维护工程师常常需要投入大量时间研读手册和文档,因为详细记住所有操作流程往往是不可能的。然而,AR可以将操作指令直接叠加显示在工人的视野中。这可以提供更有效的培训,但更重要的是,它能让接受过较少培训的人员也能正确地完成工作。

计算机英语单词扇贝打卡

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐