1 条题解

  • -1
    @ 2024-10-15 21:14:44

    这是一道非常简单的质数判断问题,遍历数字时要从小到大,否则就会溢出或超时

    #include<iostream>
    #include<cmath>
    using namespace std;
    
    int n;
    
    bool check(int);
    
    int main()
    { cin>>n;
      for(int i=2;i<=n-1;i++)
        { if((check(i)==true)&&(n%i==0))
            { cout<<n/i;
              break;
    		}
    	}
      return 0;
    }
    
    bool check(int x)
    { for(int i=2;i<=sqrt(x);i++)
        { if(x%i==0)
            return false;
    	}
      return true;
    }
    
    

    下面附上一种花里胡哨的做法(只能得90)

    #include<iostream>
    using namespace std;
    
    int a[90000001];
    int top=0;
    
    void zs(int,int);
    
    int main()
    { int n;
      cin>>n;
      zs(2,n);
      cout<<a[top];
      return 0;
    }
    
    void zs(int p,int x)
    { if(x==1)
        { return;
    	}
      else
        { if(x%p==0)
           { while(x%p==0)
               { if(p!=a[top])
                   a[++top]=p;
    		     x/=p;
    		     if(x==1)
    		       break;
    		   }
    	     zs(p+1,x);
    	   }
          else
            zs(p+1,x);
    	}
    }
    
    • 1

    信息

    ID
    197
    时间
    1000ms
    内存
    128MiB
    难度
    7
    标签
    递交数
    89
    已通过
    22
    上传者