数论题合集

1. 迫真数论

题目描述

H君有一天出门的时候也许是因为过于疲惫,不幸追尾了一辆黑色高级轿车,车主提出的和解条件是…解答一个数论难题!H君一秒钟就搞到了答案,但是想要保护后辈的您决定帮H君回答这个问题:

车主定义了一个函数 f(x)f(x) 表示正整数 xx 的各数位之和,举例来说,f(114514) = 1+1+4+5+1+4=16f(114514)=1+1+4+5+1+4=16。

现在将有 qq 次询问,每次询问给出一个数 n ,您需要回答 n 的约数中有多少个数 x 满足 f(x)=⌊ x/2⌋ 。

输入描述

第一行一个数 qq ,表示询问次数。

接下来 qq 行,每行一个数 nn。

数据范围:

1<= n<=1018, 1 <=q <= 105

输出描述

共 q 行,每一行为给出的 n 的约数中满足条件的数的个数。

解析:

容易发现满足 f(x) = ⌊x2⌋ 的正整数 x 只有 17, 18,证明如下。
∵ f(x) = ⌊x2⌋
∴ 2f(x) = x or 2f(x) + 1 = x
设 n 为满足上述条件的数
由 n 的位数考虑:
• n 只有一位:设 x = a,则 2a = a or 2a + 1 = a,显然 a 没有 [1, 9] 间
的整数解
• n 有两位:设 x = 10a + b(即 a 是十位, b 是个位),则 2a + 2b =
10a + b or 2a + 2b + 1 = 10a + b
∴ 8a − b = 0 or 8a − b − 1 = 0
∴ a = 1, b = 8 or a = 1, b = 7
∴ n = 18 or n = 17
• n 有三位:设 x = 100a + 10b + c(即 a 是百位, b 是十位, c 是个位),
则 2a + 2b + 2c = 100a + 10b + c or 2a + 2b + 2c + 1 = 100a + 10b + c
∴ 98a + 8b − c = 0 or 98a + 8b − c − 1 = 0
∵ a ≥ 1, b ≥ 1(a 是百位, b 是十位)
∴ c ≥ 108
不满足 c ∈ [1, 9](c 是个位),故该情况不成立
• 大于三位的,与三位类似,都与个位 ∈ [1, 9] 不符
综上,满足 f(x) = ⌊x2⌋ 的正整数仅有 17, 18。
对于一组询问,判断 17 和 18 是否是 n 的约数即可。

代码实现

public class 迫真数论 {
    private static Scanner cin = new Scanner(System.in);

    private static PrintWriter out = new PrintWriter(System.out);

    public static void main(String[] args) {
        int t = cin.nextInt();
        int ans = 0;
        while (t-->0) {
            BigInteger num = cin.nextBigInteger();
            ans = 0;
            if (num.mod(BigInteger.valueOf(18)) == BigInteger.ZERO) {
                ans++;
            }
            if (num.mod(BigInteger.valueOf(17)) == BigInteger.ZERO) {
                ans++;
            }
            System.out.println(ans);
        }


    }
}
#include<iostream>
using namespace std;
int main() {
  int t;
  cin >> t;
  int ans;
  while (t--) {
    long long n;
    cin >> n;
    ans = 0;
    if (n%18L == 0) {
      ans++;
    }
    if (n%17L == 0) {
      ans++;
    }
    cout << ans << endl;
  }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
网络攻击对抗的发展历程是一个漫长的过程,从最初的单纯的网络安全防护到如今的智能化、自动化、大数据分析等多元化技术手段的综运用,一直在不断地演进。下面将从以下几个方面对网络攻击对抗的发展历程进行探讨: 1. 初期防护阶段 在互联网刚刚兴起的时期,网络攻击形式单一,攻击手段简单,主要是一些简单的攻击方式,如病毒、木马、蠕虫等,此时主要的网络攻击对抗手段是基于规则的防御机制。这种防御机制主要是通过对网络流量的监控和检测来实现,例如防火墙、入侵检测系统等。 2. 防御技术升级 随着网络攻击手段的不断升级,规则防御机制的局限性也逐渐显现出来。为了更好地应对网络攻击,逐渐采用了一些新的技术手段,如加密技术、VPN等。这些技术手段可以有效地加强网络的安全性,提高网络攻击的防御能力。 3. 智能化防御 随着计算机技术的不断发展,人工智能、机器学习等技术也被引入到了网络攻击对抗中,成为了网络攻击对抗的新趋势。智能化防御能够通过学习攻击者的攻击行为,自动地对攻击进行识别和防御。 4. 大数据分析 随着大数据时代的到来,大数据分析技术也被广泛应用于网络攻击对抗中。大数据分析可以通过对海量数据的分析,识别出攻击行为的特征,从而实现更加准确的网络攻击预测和实时防御。 总之,网络攻击对抗的发展历程是一个不断演进的过程,随着技术的不断进步,网络攻击对抗的手段也在不断升级,未来网络攻击对抗的趋势将会更加智能化、自动化、大数据化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值