数论初步(质数的判断、约数)(c++)

因数和

给你一个整数N,求它的所有因数的和。比如N=12,和为1+2+3+4+6+12=28。

输入格式

只一行,一个整数N。(1≦N≦1,000,000)

输出格式

只一行,一个整数N。

输入/输出例子1

输入:

12

输出:

28

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,s=0;
    cin>>n;
    for(int i=1;i<=n;i++){
        if(n%i==0)s+=i;
    }
    cout<<s;
    return 0;
}

因子个数

桐桐做完数学作业,闲来无事,她发现整数n的因子很有趣,好像还存在一些规律。她想把给定的整数n的因子个数计算出来,聪明的你能帮助她吗?

输入格式

一行,一个整数 N(1<= N <= 2,000,000,000)

输出格式

一行,一个整数N的因子个数。

输入/输出例子1

输入:

6

输出:

4

样例解释

提示

(说明:1、2、3、6共4个因子)

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
long long n,z=0;
int main(){
    cin>>n;
    for(int i=1;i<=sqrt(n);i++){
        if(n%i==0)z+=2;
        if(i*i==n)z--;
    }
    cout<<z;
    return 0;
}

狱警的游戏

在一个牢狱里,关了N个犯人,当然每个犯人带着一个手铐[不然他就会......].一天晚上,狱警觉得不好玩想来玩一个游戏,第一轮他将所有的犯人的手铐都打开,在第二轮将所有犯人号码为2的倍数的手铐又扣上,在第三轮将所有犯人号码为3的倍数的手铐做一次反处理,即如果他的手铐是打开的那么就扣上,如果是扣上的就把它又打开。如此这样进行下去。直到第N轮,游戏结束之后他长长的喝了一只威士忌后扬长而去,当然这时那些手铐被打开的犯人自然可以轻松的夺路而逃了。现在的问题就是:请你确定一下最后有多少个犯人能逃出牢狱?

输入格式

输入一个正整数N, 范围在[2,1000000000]。

输出格式

一整数,有多少犯人能逃出牢狱。

输入/输出例子1

输入:

10

输出:

3

样例解释

编号1、4、9的犯人逃走了。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
long long n;
int main(){
	cin>>n;
	cout<<int(sqrt(n));
    return 0;
}

质数判断

输入两个正整数a ,b ,请判断a+b和a*b是否为质数,是就输出"YES",否就输出"NO"。

输入格式

一行两个正整数 a , b ,1<=a,b<=1000。

输出格式

两行,每行一个字符串,YES/NO,分别表示a+b和a*b是否为质数。

输入/输出例子1

输入:

2 3

输出:

YES

NO

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b;
    cin>>a>>b;
    int s=a+b;
    int x=a*b;
    bool f=1;
    for(int i=2;i<s;i++){
        if(s%i==0){
            f=0;
            break;
        }
    }
    if(f==1)cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
    bool h=1;
    for(int i=2;i<x;i++){
        if(x%i==0){
            h=0;
            break;
        }
    }
    if(h==1)cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
    return 0;
}

区间内的质数

给出两个整数a和b,输出a至b范围内的所有质数。

输入格式

第一行,两个整数a和b。1<=a<=b<=1000

输出格式

共1行,若干个整数,空格分开。

输入/输出例子1

输入:

4 15

输出:

5 7 11 13

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
bool f=1;
int a,b;
int main(){   
    cin>>a>>b;
    for(int i=a;i<=b;i++){
        f=1;
        if(i!=1){for(int j=2;j<i;j++){
            if(i%j==0){
                f=0;
                break;
            }
        }
        if(f==1)cout<<i<<" ";}
    }
    
    return 0;
}

判断质数 查看测评数据信息

给你一个整数a,请你判断它是否质数。如果不是,输出1,如果是,输出0。

输入格式

输入2行,第一行一个整数g,表示有g组测试数据。

接下来有g个数a。1<=g<=10,1<=a<=2147483647。

输出格式

g行,每行0或1。

输入/输出例子1

输入:

3

9 7 6

输出:

1

0

1

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
bool f(long long num){
    if(num<=1)return 0;
    for(long long i=2;i*i<=num;i++)
        if(num%i==0)
            return 0;
    return 1;
}
long long g,a;
int main(){
    cin>>g;
    for(long long i=0;i<g;i++){
        cin>>a;
        if(f(a))cout<<"0"<<endl;
		else cout<<"1"<<endl;
    }
    return 0;
}

末尾为m的素数

质数的定义:一个大于1的自然数,除了1和它本身外没有其他的约数。求出n以内,末位数为m的所有质数。如果没有质数的话,输出-1。

输入格式

输入两个数n,m。(2<=n<=10000,1<=m<=9)

输出格式

n以内末位数为m的所有质数

输入/输出例子1

输入:

100 7

输出:

7 17 37 47 67 97

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
bool f=1;
long long a,b,s=0;
int main(){   
    cin>>a>>b;
    for(int i=2;i<=a;i++){
        f=1;
        if(i%10==b){
		for(int j=2;j<i;j++){
            if(i%j==0){
                f=0;
                break;
            }
        }
        if(f==1){
            cout<<i<<" ";
            s++;
        }
		}
    }
    if(s==0)cout<<"-1";
    return 0;
}

因数和2 查看测评数据信息

给你一个整数N,求它的所有因数的和。比如N=12,和为1+2+3+4+6+12=28。

输入格式

只一行,一个整数N。(1≦N≦2,000,000,000)

输出格式

只一行,一个整数:N的所有因数之和。

输入/输出例子1

输入:

12

输出:

28

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
long long n,z=0;
int main(){
    cin>>n;
    for(int i=1;i<=sqrt(n);i++){
        if(n%i==0)z=z+i+n/i;
        if(i*i==n)z=z+i;
    }
    cout<<z;
    return 0;
}

分解质因数

请你把一个数分解质因数。

输入格式

一个整数n。(2<=n<=1000000)

输出格式

整数n分解质因数后的因子。从小到大排。

输入/输出例子1

输入:

12

输出:

2 2 3

输入/输出例子2

输入:

7

输出:

7

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
    int num;
    cin>>num;
    for(int i=2;i<=num;i++){
        while(num%i==0){
            cout<<i;
            num/=i;    
            if(num!=1)cout<<" ";
        }
    }
    return 0;
}
相关推荐
SomeB1oody4 分钟前
【Rust中级教程】2.7. API设计原则之灵活性(flexible) Pt.3:借用 vs. 拥有、`Cow`类型、可失败和阻塞的析构函数及解决办法
开发语言·后端·性能优化·rust
m0_7482402516 分钟前
python轻量级框架-flask
开发语言·python·flask
论迹27 分钟前
【JavaEE】-- 多线程(初阶)2
java·开发语言·java-ee
+72038 分钟前
如何在java中用httpclient实现rpc post 请求
java·开发语言·rpc
web_155342746561 小时前
性能巅峰对决:Rust vs C++ —— 速度、安全与权衡的艺术
c++·算法·rust
学习两年半的Javaer1 小时前
Rust语言基础知识详解【一】
开发语言·rust
PyAIGCMaster1 小时前
50周学习go语言:第四周 函数与错误处理深度解析
开发语言·学习·golang
9毫米的幻想1 小时前
【Linux系统】—— 冯诺依曼体系结构与操作系统初理解
linux·运维·服务器·c语言·c++
全栈开发圈1 小时前
新书速览|Rust汽车电子开发实践
开发语言·rust·汽车
PyAIGCMaster1 小时前
第二周补充:Go语言中&取地址符与fmt函数详解
开发语言·后端·golang