问题标题: 酷町堂:1062 寻找质因数

1
0
已解决
李素妍
李素妍
新手天翼
新手天翼

#include <iostream>

#include <cmath>

using namespace std;

int a[20010],maxn,maxn1,pos;

int main(){

int n;

cin>>n;

for(int i=1;i<=n;i++){

cin>>a[i];

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

if(n%a[i]==0 && maxn<=n%a[i]){

maxn=n%a[i];

}

}

if(maxn1<maxn){

maxn=maxn;

pos=a[i];

}

}

cout<<pos;

return 0;

}

李素妍在2020-05-19 20:48:52追加了内容

加10豆

注意是改错

李素妍在2020-05-19 20:51:30追加了内容

https://newcourse.codingtang.com/#/problem/problemSub?id=1062


0
已采纳
李瑞曦
李瑞曦
高级天翼
高级天翼

z这是老师的讲解哦~

1
董宇昊
董宇昊
初级启示者
初级启示者

注意了!

首先,我们要有判断质数的函数!

这里我定义的是zs(int n)

接着,我们写入里面的代码

//因为1不是质数,也不是合数,所以我们从2开始找到n的平方根

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

然后,判断他是不是i的倍数

  • if(n%i==0){
  • return false;
  • }

接着,求最大质因数函数zys(int n)

外圈是for循环

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

里面是while循环

  • while(n%i==0 && zs(i)){ //i是质因数
  • n/=i;
  • if(zs(n)) return n;
  • }

代码都出来了!

终于到主函数了

cin输入n

然后for循环

for(int i=1;i<=n;i++)

接着cin输入a

最后是核心代码

  • int p=zys(a[i]); //求a[i]的最大质因数p
  • if(p>maxx){
  • maxx=p;
  • ans=a[i];
  • }

循环外面输出ans就可以了!

祝你AC

董宇昊在2020-05-19 21:07:28追加了内容

合起来

bool zs(int n){  //判断质数的函数 
    for循环(int i=2;i<=sqrt(n);i++){//从2开始到n的平方根
        if(n%i==0){//判断n是不是i的倍数
            return false;//如果是,返回错误
        }
    }
    return true;//如果没有倍数,是质数,返回对的
}

就这些了

不然我又要禁言了

0
李瑞曦
李瑞曦
高级天翼
高级天翼

判断质数时可以用函数来写

0
李瑞曦
李瑞曦
高级天翼
高级天翼

函数:

  • bool zs(int x){
  • for(int i=2;i<x;i++){
  • if(x%i==0)
  • return false;
  • }
  • return true;
  • }

 

0
李瑞曦
李瑞曦
高级天翼
高级天翼

if(n%a[i]==0 && maxn<=n%a[i]){

maxn=n%a[i];

}

改成:

  • if(a[i]%j==0){
  • if(zs(j)){
  • if(j>b[i])
  • b[i]=j;
  • }
  • }

 

我要回答