随笔 - 81  文章 - 0  评论 - 0  阅读 - 7175 

一、素数判定

问题1:从键盘输入m,n,在屏幕上按每行10个的格式输出m~n之间的全部素数

输入

两个整数m n

输出

m~n间的素数,每行10个,每个数后用空格隔开。如果m和n为素数则包含。

样例输入 Copy

100 200

样例输出 Copy

101 103 107 109 113 127 131 137 139 149 
151 157 163 167 173 179 181 191 193 197 
199 

代码:

复制代码
#include<iostream>
#include<cmath>

using namespace std;
bool isprime1(int s);
bool isprime2(int s);

int main(){
    int m,n;
    cin>>m>>n;
    int temp[10000],vis=1;
    for(int i=m;i<=n;i++){
        //if(isprime1(i)==true){
        if(isprime2(i)==true){
            temp[vis++] = i;
        }
    }
    for(int i=1;i<vis;i++){
        if(i%10==0){
            printf("%d\n",temp[i]);
        }else{
            printf("%d ",temp[i]);
        }
    }
    cout<<endl;
    return 0;
}

bool isprime1(int s){
    if(s<=1){
        return false;
    }
    int str = (int)sqrt(1.0*s);
    for(int i=2;i<=str;i++){
        if(s%i==0){
            return false;
        }
    }
    return true;
}

bool isprime2(int s){
    if(s<=1){
        return false;
    }
    for(int i=2;i*i<=s;i++){
        if(s%i==0){
            return false;
        }
    }
    return true;
}
复制代码

问题2:寻找素数对

哥德巴赫猜想大家都知道一点吧.我们现在不是想证明这个结论,而是想在程序语言内部能够表示的数集中,任意取出一个偶数,来寻找两个素数,使得其和等于该偶数.
做好了这件实事,就能说明这个猜想是成立的.
由于可以有不同的素数对来表示同一个偶数,所以专门要求所寻找的素数对是两个值最相近的.

Input:输入中是一些偶整数M(5<M<=10000).
Output:对于每个偶数,输出两个彼此最接近的素数,其和等于该偶数.
Sample Input:

20 30 40

Sample Output:

7 13
13 17
17 23

代码:

复制代码
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;


int a[10010];
int main(){ 
    for(int i=2;i<10000;i++){
        int flag = 0;
        for(int j=2;j*j<=i;j++){
            if(i%j==0){
                flag = 1;
                break;
            }
        }
        if(flag==0){
            a[i] = 1;
        }
    }
    int n;
    while(cin>>n){
        for(int i=n/2;i>=2;i--){
            if(a[i]==1&&a[n-i]==1){
                cout<<i<<" "<<n-i<<endl;
                break;
            }
        }
    }
    return 0;
}
复制代码

 二、欧几里得算法

问题:a/b + c/d

给你2个分数,求他们的和,并要求和为最简形式。

Input:输入首先包含一个正整数T(T<=1000),表示有T组测试数据,然后是T行数据,每行包含四个正整数a,b,c,d(0<a,b,c,d<1000),表示两个分数a/b 和 c/d。
Output:对于每组测试数据,输出两个整数e和f,表示a/b + c/d的最简化结果是e/f,每组输出占一行。
Sample Input:

2
1 2 1 3
4 3 2 3

Sample Output:

5 6
2 1

代码:

 

复制代码
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

int gcd(int n,int m);
int main(){ 
    int t;
    cin>>t;
    while(t--){
        int a,b,c,d;
        cin>>a>>b>>c>>d;
        int mu = b*d;
        int zi = a*d+b*c;
        cout<<(int)(zi/gcd(zi,mu))<<" "<<(int)(mu/gcd(zi,mu))<<endl;
    }
    return 0;
}


int gcd(int n,int m){
    if(m==0){
        return n;
    }
    return gcd(m,n%m);
}
复制代码

 

posted on   晨曦生辉耀匕尖  阅读(197)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
点击右上角即可分享
微信分享提示