C++:求质数因子的相关编程题

一、leetcode:计数质数

题目:统计所有小于非负整数 n 的质数的数量。
示例:
在这里插入图片描述
题解:首先说下质数的定义:质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。其次,说下本文使用的方法:厄拉多塞筛法。
西元前250年,希腊数学家厄拉多塞(Eeatosthese)想到了一个非常美妙的质数筛法,减少了逐一检查每个数的的步骤,可以比较简单的从一大堆数字之中,筛选出质数来,这方法被称作厄拉多塞筛法(Sieve of Eeatosthese)。
具体操作:先将 2~n 的各个数放入表中,然后在2的上面画一个圆圈,然后划去2的其他倍数;第一个既未画圈又没有被划去的数是3,将它画圈,再划去3的其他倍数;现在既未画圈又没有被划去的第一个数 是5,将它画圈,并划去5的其他倍数……依次类推,一直到所有小于或等于 n 的各数都画了圈或划去为止。这时,表中画了圈的以及未划去的那些数正好就是小于 n 的素数。
C++代码实现:

class Solution {
public:
    int countPrimes(int n) {
            if(n<3){return 0;}//0和1既不是质数也不是合数
            else if(n==3){
                return 1;//只有2
            }
            else{
                vector<int>v(n-1,true);
                for(int i=2;i<=sqrt(n);i++){
                    int k=i;
                    if(v[i-1]==true){
                        while((i*k)<n){
                            v[i*k-1]=false;
                            k++;
                        } 
                    }
                }
                int count=1;
                for(int i=2;i<v.size();i++){
                    if(v[i]==true)count++;
                }
                return count;
            }
            
    }
};

二、牛客题:质数因子

题目:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )最后一个数后面也要有空格
输入描述:
输入一个long型整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。
代码实现:
实现原理:while(num%质数因子==0)
   num=num/质数因子.

#include<iostream>
using namespace std;
int main(){
    long n;
    cin>>n;
    long k=2;//依次除以2、3、4...,但只有k都为质数因子时才能满足下列while循环条件n%k==0,
  //比如n=180,180/2/2=45,那45肯定不能再除以4了,所以push进v中的k都是质数。
    while(n!=1){
        while(n%k==0){
        n=n/k;
        cout<<k<<" ";
    }
        k++;
    }
    return 0;
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值