前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2017百度之星初赛(A):小C的倍数问题

2017百度之星初赛(A):小C的倍数问题

作者头像
mathor
发布2018-07-24 15:31:09
2980
发布2018-07-24 15:31:09
举报
文章被收录于专栏:mathormathormathor
题目链接:HDOJ6108
image
image

 假设P进制下有个数(abc)~P~,若这个数满足:(abc)~P~ % B == 0,则以下两个等式一定成立:

  1. (a * P^2^ + b *P^1^ + c * P^0^) % B = sum % B == 0
  2. (a + b + c) % B = ans % B == 0

 以上两个式子同时成立的条件是:P % B == 1,所以满足条件的B的个数为P - 1的因子数

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        int T = cin.nextInt();
        while((T--) != 0) {
            int n = cin.nextInt();
            solve(n - 1);
        }
    }
    private static void solve(int x) {
        int ans = 2;
        for(int i = 2;i <= Math.sqrt(x);i++) 
            if(x % i == 0)
                ans += 2;
        if((int)Math.sqrt(x) * (int)Math.sqrt(x) == x) 
            ans--;
        System.out.println(ans);
    }
}

 每个数至少两个因子,一个1,一个本身,所以初始化ans=2,其次,只用遍历到sqrt(x)即可,找到可以除尽的ans就加2,因为每个数的因子都是成对的,最后如果这个数本身就是个完全平方数,那就再减掉一个即可

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目链接:HDOJ6108
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档