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

0
0
已解决
赵舒茁
赵舒茁
修练者
修练者

8364   找第二大的因数

经验值:800

时间限制:1000毫秒

内存限制:128MB

题目描述 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

赵舒茁在2023-08-28 19:02:22追加了内容

急求解


0
已采纳
王耀森
王耀森
中级光能
中级光能
bool f(int q){
    for(int i=2;i<=sqrt(q);i++){
        if(q%i= =0){
            return false;
        }
    }return true;
}
主函数{
int n;
输入n;
if(n= =1){
输出1;
    return 0;//不能少,否则90
}
else if(f(n)){
输出"YES";
return 0;
}
else{
    for(int i=n/2;i>=1;i--){
        if(n%i= =0){
           输出i;
       结束循环
        }
    }
}

 

0
陶欣怡
陶欣怡
资深守护
资深守护

你这是不会写还是怎么了

0
蔡辰夕
蔡辰夕
新手启示者
新手启示者

bool f(int q){

 

for(int i=2;i<=sqrt(q);i++){

 

if(q%i= =0){

 

return false;

 

}

 

}return true;

 

}

 

主函数{

 

int n;

 

输入n;

 

if(n= =1){

 

输出1;

 

return 0;//不能少,否则90

 

}

 

else if(f(n)){

 

输出"YES";

 

return 0;

 

}

 

else{

 

for(int i=n/2;i>=1;i--){

 

if(n%i= =0){

 

输出i;

 

结束循环

 

}

 

}

 

}

我要回答