Odd vs Even-AtCoder Regular Contest 116 A

Problem Statement
Given is a positive integer N N N.Which are there more of, positive odd divisors of N N N or positive even divisors of N N N?
翻译:给定数字 N ( N ≤ 1 0 18 ) N (N≤10^{18}) N(N1018),判断 N N N的所有因数中,奇数多还是偶数多。
传送门

数论题。
第一次做稍微有点硬核的数论题,消化好一阵才搞明白。
一开始做的时候一直觉得自己是不是有什么结论不会,后来仔细想想这个操作也挺常规的。

官方题解
官方题解思路: 首先将数字拆分为 2 n × a ( a 2^n×a(a 2n×a(a为奇数 ) ) )的形式,这样 a a a的所有因数就集合是{ 2 i × j 2^i×j 2i×j} ( ( (其中 i = 0 , 1 , 2 , . . . , n ; j i=0,1,2,...,n;j i=0,1,2,...,n;j a a a的因数 ) ) )
原因:因数的因数是因数
最后,如果 N N N有m个奇数因子,就有n×m个偶数因子。
最后判断m与n×m的大小关系就可以了

#include<bits/stdc++.h>
using namespace std;
int main()
{
	
	int t;cin>>t;while(t--)
	{
		long long a;
		cin>>a;
		int i=0;
		int flag=0;
		while(pow(2,i)<=a)
		{
			long long b=pow(2,i);
			if(a%b==0)
			{
				flag=i;
			}
			i++;
		}
		if(flag==0)	cout<<"Odd";
		else if(flag==1)	cout<<"Same";
		else cout<<"Even";
		cout<<endl;
	}
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值