数论初步(质数的判断、约数)(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;
}
相关推荐
明月看潮生1 分钟前
青少年编程与数学 02-003 Go语言网络编程 15课题、Go语言URL编程
开发语言·网络·青少年编程·golang·编程与数学
南宫理的日知录12 分钟前
99、Python并发编程:多线程的问题、临界资源以及同步机制
开发语言·python·学习·编程学习
逊嘘29 分钟前
【Java语言】抽象类与接口
java·开发语言·jvm
van叶~31 分钟前
算法妙妙屋-------1.递归的深邃回响:二叉树的奇妙剪枝
c++·算法
Half-up32 分钟前
C语言心型代码解析
c语言·开发语言
knighthood200142 分钟前
解决:ros进行gazebo仿真,rviz没有显示传感器数据
c++·ubuntu·ros
Source.Liu1 小时前
【用Rust写CAD】第二章 第四节 函数
开发语言·rust
monkey_meng1 小时前
【Rust中的迭代器】
开发语言·后端·rust
余衫马1 小时前
Rust-Trait 特征编程
开发语言·后端·rust
monkey_meng1 小时前
【Rust中多线程同步机制】
开发语言·redis·后端·rust