codeforces 1549A

1. 题目链接

Gregor and Cryptography

2. 题目代码

#include<iostream>
using namespace std;

int main(){
    int testCase;
    cin >> testCase;
    int primeNumber;
    bool isOutput = false;
    while(testCase --){
        cin >> primeNumber;
        // isOutput = false;
        // for(int ingeterA = 2; ingeterA <= primeNumber; ingeterA ++){
        //     for(int ingeterB = ingeterA + 1; ingeterB <= primeNumber; ingeterB ++){
        //         if(primeNumber % ingeterA == primeNumber % ingeterB){
        //             cout << ingeterA << " " << ingeterB << endl;
        //             isOutput = true;
        //             break;
        //         }
        //     }
        //     if(isOutput){
        //         break;
        //     }
        // }
        cout << 2 << " " << primeNumber - 1 << endl;
    }
    return 0;
}

3. 题目总结

在这里插入图片描述
① 答案错误那个代码是:cout << 2 << " " << (primeNumber - 1) / 2 << endl;
② 当时的想法是:该题点明了“P是大于等于5的素数”,所以P-1一定是偶数。该题只要求"P%a = P % b",因此如果令P%a= P%b=1,那么a、b就等于P-1的两个因数。又因为P-1是偶数,所以可以让a=2,b= (primeNumber - 1) / 2 。
③ 漏洞:忽略了a、b不能相等的情况。P=5时,a、b都等于2.
④ 改进:直接输出 2 和 primeNumber - 1 即可。因为 primeNumber - 1 也是其自身的一个因数。
⑤ 该题耗时:20min

下述代码来源:
在这里插入图片描述
在这里插入图片描述
值得学习的地方:
        ios_base::sync_with_stdio(0);cin.tie(0); 是用于加速 C++ 输入输出流的常用技巧,特别是在处理大量输入输出数据时。这些命令主要用于在程序竞赛或性能要求较高的场景下提高效率。
        ios_base::sync_with_stdio(0);:这一行代码用于解同步 C++ 的标准输入输出流和 C 的标准输入输出流。默认情况下,C++ 的标准流(cincout 等)和 C 的标准流(scanfprintf 等)是同步的。这意味着它们之间会有一些额外的开销,以确保两者的一致性。使用 ios_base::sync_with_stdio(false); 时,C++ 标准流和 C 标准流的同步被关闭,这样可以减少一些开销,从而提高性能。
       cin.tie(0);:这一行代码将 cincout 解绑定。 默认情况下,cin 是绑定到 cout 的,这意味着每次 cin 操作前,cout 都会被刷新(flush)。这通常是为了确保用户在输入时能够看到所有输出。通过使用 cin.tie(0);,你可以解除这种绑定,避免每次输入操作前都刷新输出流,从而提高输入输出操作的效率。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值