首页 > 其他分享 >5.15打卡

5.15打卡

时间:2023-05-15 20:12:08浏览次数:38  
标签:return 函数 int 偶数 素数 5.15 fun 打卡

一、问题描述:

2000以内的不小于4的正偶数都能够分解为两个素数之和(即验证歌德巴赫猜想对2000以内的正偶数成立)。

二、设计思路:
该问题我们可以采用函数来解决。
定义一个函数,函数名设为fun,在其中判断传进来的实际参数(设为n(n=2)),是否为素数,如果是素数则返回1,否则返回0。在判断是否为素数时,可以采用5.1节中介绍的方法。需要注意的是,在所有偶数中,只有2是唯一的素数。因此,在函数fun中,可以分为以下4种情况来判断。
n=2,是素数,返回1。
n是偶数,不是素数,返回0。
n是奇数,不是素数,返回0。
n=2,是素数,返回1。
在主函数中,使用循环结构,每输入一个数据就处理一次,直到遇到文件结束符则终止输入。下面详述主函数中处理数据的过程。
由于我们已经对输出做了限定,即当输出结果时,如果有多组解,则输出a最小的那组解。显然,对每个读入的数据n,a必然小于或等于n/2,因此,定义循环变量i,使其从2~n/2进行循环,每次循环都做如下判断:fun(i)&&fun(n-i)是否为1。

如果fun(i)&&fun(n-i)=1,则表示fun(i)=1同时fun(n-i)=1。由fun)函数的定义可知,此时i和n-i都为素数,又由于i是从2~n/2按由小到大的顺序来迭代的,因此(i, n-i)是我们求出的一组解,且该组解必然是所有可能解中a值最小的。还需要注意的是,由于除了2以外的偶数不可能是素数,因此i值的可能取值只能是2和所有的奇数。

三、程序流程图

 

 

四、代码实现

#include<math.h>

#include<stdio.h.>

int fun(int n)

{

    int i;

    if(n==2)

        return 1;

    if(n%2==0)

        return 0;

    for(i=3;i<=sqrt(n);i+=2)

        if(n%i==0)

        return 0;

    return 1;

}

int main()

{

    int n,i,ok;

    while(scanf("%d",&n)!=EOF)

    {

        ok=0;

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

        {

            if (fun(i))

                if(fun(n-i))

            {

                printf("%d %d\n",i,n-i);

                ok=1;

            }

            if(i!=2)

                i++;

            if(ok)

                break;

        }

                }

}

标签:return,函数,int,偶数,素数,5.15,fun,打卡
From: https://www.cnblogs.com/wanbeibei/p/17402938.html

相关文章

  • 5.15每日总结
    今天上课老师讲了人机交互设计,讲了软件的设计如何变得更加人性化,满足用户的真实需求。还在团队中讨论了后续的项目冲刺验收要完成的任务和分工,未来要实现和改进哪些功能。之后的时间对记账本App页面的交互设计进行了一些改进。......
  • 打卡1
    问题描述:一个口袋中放有12个球,已知其中三个是红的,三个是白的,六个是黑的,现从中任取八个,问共有多少种颜色搭配?流程图:   伪代码:num<-0fori<-0to3forj<-0to3if8-i-j>6continueelsek=8-i-jnum++outputi,j,koutputnum代码:#include<iostream>usingnames......
  • 每日打卡一小时(第二十五天)
    一.问题描述请使用模板参数设计实现双倍功能函数,函数功能要求实现返回值为输入参数的两倍,函数参数应能适应整型、浮点型、双精度型等各种类型,返回值类型与参数一样。二.设计思路注意函数模板参数的设计格式,按要求完成即可。三.代码实现#include<iostream>usingnamespace......
  • 5.15 2.8
    一、问题魔术师利用一副牌中的13张黑桃,预先将它们排好后迭在一起,并使牌面朝下。然后他对观众说:我不看牌,只要数数就可以猜到每张牌是什么,我大声数数,你们听,不信?你们就看,魔术师将最上面的那张牌数为1,把它翻过来正好是黑桃A,他将黑桃A放在桌子上,然后按顺序从上到下数手中的余牌......
  • 5.15
    #include<stdio.h>voidmain(){longmul,number,k,a,b;printf("Itexistsfollowingautomorphicnmberssmallthan100000:\n");for(number=0;number<100000;number++){for(mul=number,k=1;(mul/=10)>0;k*=10);a=k*10;mul=0;b=10;while(k>0){mul=......
  • 算法基础上机实验——2023.5.15
    1.#include<cmath>#include<cstdio>#include<iostream>#include<algorithm>usingnamespacestd;intmain(){inta[310],n,k=0;cin>>n;while(n!=-99999){a[k++]=n;cin>>......
  • c++打卡练习(29)
    求一百以内的勾股数流程图:伪代码:源代码:#include<iostream>usingnamespacestd;intmain(){ inta,b,c,i,j,k; for(a=1;a<=100;a++){ for(b=a+1;b<=100;b++){ for(c=b+1;c<=100;c++){ if(a*a+b*b==c*c){ cout<<a<<""<<b<<......
  • 编程一小时2023.5.15
    1.#include<bits/stdc++.h>usingnamespacestd;boolbook[10000001];intprime[100001];intt=1;voidPrime(intx){memset(book,0,sizeof(book));for(inti=2;i<=x;i++){if(!book[i])prime[t++]=i;for(intj=1;prime[j]<=x/i;j++){......
  • 第24天打卡
    问题:输出所有的水仙花数源代码:#include<stdio.h>intmain(){inth,t,i,n;for(n=100;n<1000;n++){h=n/100;t=(n-h*100)/10;i=n%10;if(n=h*h*h+t*t*t+i*i*i)printf("%d\t",n);}}......
  • 打卡 c语言趣味编程 二分查找算法实现
    N个有序整数数列已放在一维数组中,利用二分查找法查找整数在数组中的位置。若找到,则输出其下标值;反之,则输出“Notbefound!”。思路:二分查找法(也叫折半查找)其本质是分治算法的一种。所谓分治算法是指的分而治之,即将较大规模的问题分解成几个较小规模的问题,这些子问题互相独......