【codechef】判断一个数是否为某组勾股数的最大数?

15 篇文章 0 订阅

如果一个数有 4n+1 形式的素因子,那么它可以是某组勾股数里最大的那个数。
否则不是。

https://www.codechef.com/OCT15/problems/ADTR

vector<bool>generate(int n){
    vector<bool> input(n + 1, true);
    vector<bool> ans(n + 1, false);    
    int sqrtN = (int)sqrt(n);
    for (int i = 2; i <= sqrtN; i ++) { //素数打表(高效)
        if(!input[i]) 
            continue;
        for(int j = i * i; j <= n; j += i) 
            input[j] = false;
    }
    for(long int i = 2; i < n ;i++){
    	if(input[i]){
    		if(i%4==1){
    			for(long int j=i;j<=n;j+=i) //因子符合,所有倍数都符合
    				ans[j] = true; 
    		}
    	}
    }
    return ans;
}
int main(){
	vector<bool> primes = generate(5000005);
	if(primes[a])
		printf("YES\n");
	else
		printf("NO\n");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值