问题标题: 酷町堂:8364 找第二大的因数

0
0
佟佳航
佟佳航
资深守护
资深守护

质因数个数2经验值:800

题目描述 De**ion

小明手上有一张大王卡,上面有一个数n(2<=n<=1000000),这张大王卡是能兑换其他数卡,兑换规则是:
根据大王卡片上面的数字n,能换的卡片上的数字必须是n的质因数。
那么请问,小明拿着自己的卡片去兑换的时候,最多有多少种不同的卡片可以供小明选择。

输入描述 Input De**ion

一行,一个正整数n

输出描述 Output De**ion

一行,n的不重复质因数的个数。

样例输入 Sample Input

80

样例输出 Sample Output

2

数据范围及提示 Data Size & Hint

80=2*2*2*2*5,有2和5两个不同的质因数

#include<bits/stdc++.h>
using namespace std;
int cnt;
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n-1;i++){
        while(n%i==0){
            i++;
            cnt++;
            n/=i;
        }
    }
    cout<<cnt;
    return 0;
}

 

佟佳航在2023-03-03 13:14:01追加了内容

这题我会了,换一题:

找第二大的因数经验值:800

题目描述 De**ion

对于一个大于等于1的自然数n:
1)如果它只有一个因数,那么这个数是1,则输出这个因数;
2)如果它只有两个因数,那么它是质数,则输出“YES”;
3)如果它有两个以上的因数,那么它是合数,则输出它第二大的因数。

输入描述 Input De**ion

输入一个大于等于1的正整数n

输出描述 Output De**ion

如果n只有一个因数,则输出这个因数;
如果n是质数,则输出“YES”;
如果n是合数,则输出它第二大的因数。

样例输入 Sample Input

样例输入1: 3 ---------------------------------------------------------- 样例输入2: 8 ---------------------------------------------------------- 样例输入3: 1

样例输出 Sample Output

样例输出1: YES ---------------------------------------------------------- 样例输出2: 4 ---------------------------------------------------------- 样例输出3: 1

数据范围及提示 Data Size & Hint

1<=n<=1000000000

#include<bits/stdc++.h>
using namespace std;
int cnt;
bool f(int n){
    if(n==1){
        cnt++;
        return 0;
    }
    for(int i=2;i<=sqrt(n);i++){
        if(n%i==0){
            return 0;
        }
    }
    return 1;
}
int main(){
    int n;
    cin>>n;
    if(cnt==1){
        cout<<"1";
    }else if(f(n)){
        cout<<"YES";
    }else{
        for(int j=2;j<=n;j++){
            if(n%j==0){
               cout<<n-j;
               break;
            }
        }
    }
    return 0;
}

 

我要回答