问题标题: 酷町堂:3717 20分,如何优化?

0
0
已解决
曹博扬
曹博扬
初级天翼
初级天翼

3717 20分,如何优化?

#include<iostream>
#include<cmath>
using namespace std;
long long n,a[10000010];
long long g(long long n){
	long long c=0;
	for(long long i=1;i<=n;i++){
		if(n%i==0){
			c++;
			a[c]=i;
		}
	}
	if(c==1)
		return a[c];
	else
		return a[c-1];
}
bool f(long long x){
	if(x==1) return false;
	for(long long i=2;i<=sqrt(x);i++){
		if(x%i==0){
			return false;
		}
	}
	return true;
}
int main(){
	cin>>n;
	if(f(n)){
		cout<<"YES";
	}
	else{
		cout<<g(n);
	}
    return 0;
}

 

曹博扬在2020-09-12 15:51:52追加了内容
#include<iostream>
#include<cmath>
using namespace std;
long long n,a[10000010];
bool f(long long x){
	if(x==1) return false;
	for(long long i=2;i<=sqrt(x);i++){
		if(x%i==0){
			cout<<x/i;
			return false;
		}
	}
	return true;
}
int main(){
	cin>>n;
	if(f(n)){
		cout<<"YES";
	}
    return 0;
}

大佬,你再帮我看一下这哪错了


0
已采纳
宣海宁
宣海宁
中级光能
中级光能

埃氏筛

宣海宁在2020-09-12 15:34:56追加了内容

好麻烦啊

宣海宁在2020-09-12 15:38:30追加了内容

提供个思路:

验证质数(sqrt)的时候,找到了一个因数,直接输出另一个因数(为什么?,不懂可以问我)

也就是说,把找因数和验质数放在一起,速度会提高很多!!!(你知道麦克斯吗)

我要回答