问题标题: 酷町堂:HELP

0
0
已解决
许金夫
许金夫
初级天翼
初级天翼

5334   质因数分解经验值:800

题目描述 Description

已知正整数 nn 是两个不同的质数的乘积,试求出较大的那个质数。

输入描述 Input Description

输入只有一行,包含一个正整数 nn。

输出描述 Output Description

输出只有一行,包含一个正整数 pp,即较大的那个质数。

样例输入 Sample Input

21

样例输出 Sample Output

7

数据范围及提示 Data Size & Hint

对于 30\%30% 的数据,n\le 1000n≤1000;
对于全部数据,6\le n\le 2\times 10^96≤n≤2×109。

超了,60分

#include <bits/stdc++.h>
using namespace std;
bool cmp(int x){
    for(int i=2;i<=sqrt(x);i++)
        if(x%i==0) return false;
    return true;
}
int main(){
    int n;
    cin>>n;
    for(int i=n;i>=sqrt(n);i--){
        if(n%i==0&&cmp(i)==1){
            cout<<i;
            return 0;
        }
    }
    return 0;
} 

 


0
已采纳
徐子玄
徐子玄
初级光能
初级光能

用不着埃氏筛!!1439做了吗??一模一样!

第一步,求出输入的n的最小质因数!(最小质因数总比最大质因数找得快,要用到函数:

int prime(int n) {

        for(int i=2;i<=sqrt(n);i++)

                if(n%i==0)

                        return 0;

        return 1;

})

第二步:变量i循环2~n,判断如果是质数,输出n除以i的值。

望采纳!

 

0
刘乐宸
刘乐宸
新手天翼
新手天翼
  • while(n!=1)
  • {
  • for(int i=2;i<=n;i++)
  • {
  • if(n==i)
  • {
  • cout<<i;
  • n=n/i;
  • break;
  • }
  • if(n%i==0)
  • {
  • cout<<i<<"*";
  • n=n/i;
  • break;
  • }
  • }
  •  while(n!=1)
        {
            for(int i=2;i<=n;i++)
            {
                if(n==i)
                {
                    cout<<i;
                    n=n/i;
                    break; 
                }
                if(n%i==0)
                {
                    cout<<i<<"*";
                    n=n/i;
                    break;
                }
            }

    埃氏筛

0
刘英杰
刘英杰
新手天翼
新手天翼

高精度

从n向下减

发现质数且是n的因数直接输出并return 0

0
我要回答