水题小结1


1.    判断素数
#include<bits/stdc++.h>
bool IsPrime(int x){
    if(x==1) return false;
    if(x==2||x==3) return true;
    if(x%6!=1&&x%6!=5) return false;
    for(int i=5;i*i<=x;i+=6){
        if(x%i==0||x%(i+2)==0) return false;
    }
    return true;
}
int main(){
    int x;scanf("%d",&x);
    if(IsPrime(x)) printf("%d is a prime number",x);
    else printf("%d is not a prime number",x);
    return 0;
}

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

void check(int a)
{
    for(int i=2;i<=sqrt(a);i++)
        {
            if(a%i==0)
            {
                cout<<"no"<<endl;
                return ;
            }
        }
        cout<<"yes"<<endl;
}

int main(){
    int n;
    cin>>n;
    if(n==1)
    cout<<"no"<<endl;
    else if(n==2||n==3)
    cout<<"yes"<<endl;
    else 
    check(n);
    return 0;
}

素数:除了1和它本身,没有其他的因数。1不是素数。

2.(10)用递归,将不确定位数的整数n转成字符串
#include<bits/stdc++.h>
void Conv(int n){
    if(n){
        Conv(n/10);
        char c=n%10+'0';
        putchar(c);
    }
}
int main(){
    int n;scanf("%d",&n);
    Conv(n);
    return 0;
}

 

1.最大公因数和最小公倍数
#include <bits/stdc++.h>
using namespace std;

int gcd(int a,int b){
    return b==0?a:gcd(b,a%b);
}

int main(){
   int m,n;
   cin>>m>>n;
   int g=gcd(m,n);
   int lcm=m*n/g;
   cout<<g<<endl<<lcm<<endl;
    return 0;
}

最大公因数:用辗转相除法,1.a%b得余数c   2.若c=0.则b是最大公因数   3.若c不等于0,则继续执行1,直到c为0,b即是最大公因数;
27%15=1215%12=312%3=0,所以3是最大公因数;
最小公倍数:两数相乘除以它们的最大公因数


2.水仙花数
#include <bits/stdc++.h>
using namespace std;
bool check(int x){
    int num=x;
    int sum=0;
    while(x){
        int a=x%10;
        sum+=a*a*a;
        x/=10;
    }
    return num==sum;
}
int main(){
    for(int i=100;i<=999;++i){
        if(check(i)) 
            printf("%d\n",i);
    }
    return 0;
}

3.1000以内的完数
#include <bits/stdc++.h>

using namespace std;
bool check(int num,int *arr,int &cnt){
    int sum=1;
    cnt=0;
    arr[cnt++]=1;
    for(int i=2;i*i<=num;++i){
        if(num%i==0){
            arr[cnt++]=i;
            arr[cnt++]=num/i;
            sum+=i+num/i;
        }
    }
    return num==sum;
}
int main(){
    int arr[105];
    int cnt=0;
    for(int i=1;i<=1000;++i){
        if(check(i,arr,cnt)){
            printf("%d,its factors are ",i);
            for(int i=0;i<cnt;++i) printf("%d%c",arr[i],i==cnt-1?'\n':' ');
        }
    }
    return 0;
}

 

posted @ 2020-10-14 14:50  RAIN-code  阅读(150)  评论(0编辑  收藏  举报