首页 > 其他 > 详细

Codeforces | 1475A Odd Divisor

时间:2021-07-13 23:10:08      阅读:43      评论:0      收藏:0      [点我收藏+]

【题目描述】

  给定一个整数n,判断 n 是否有大于1 的奇数因数;

【输入格式】

  第一行一个整数 t,表示测试数(1 <= t <= 1e4);

  接下来 t 行,每行一个整数 n(2 <= n <= 1e14);

【输出格式】

  若存在大于1的奇数因子,输出“YES”,否则输出“NO”;

【解题思路】

  由于 n 的范围很大,所以:

    (1)long long存储;

    (2)不可以循环遍历判断  ==》 推导有用的性质进行直接判断;

  具体性质如下:

    (1)如果一个数有大于 1 的奇数因子,则必存在大于 1 的奇数质因子;

      原因:奇数 = 奇数 * 奇数,所以一个大于 1 的奇数必然可以分解到出现奇数质因子;

    (2)如果一个数 n 没有大于 1 的奇数因子,意味着它只有偶数因子(分解质因数),但是大于 1 的偶数质数只有 2,故除非 n 是 2 的m(m >= 1)c次幂,否则一定存在大于 1 的奇数因子;

    (3)n 是 2 的幂可以二进制表示为 n & (n - 1)= 0;

     链接:https://codeforces.com/blog/entry/87188

【正确代码】

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 typedef long long ll;
 6 
 7 int main()
 8 {
 9     int t;
10     scanf("%d", &t);
11     while(t --)
12     {
13         ll n;
14         scanf("%lld", &n);
15         if(n & (n - 1)) puts("YES");
16         else puts("NO");
17     }
18     return 0;
19 }

 

Codeforces | 1475A Odd Divisor

原文:https://www.cnblogs.com/bxhbxh/p/15008722.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!