2 条题解

  • 1
    @ 2026-8-2 12:14:49

    暴力出奇迹,打表过样例

    现在是骗分时间

    我们注意到小于2e9的反素数为:

    1,2,4,6,12,24,36,48,60,120,180,240,360,720,840,1260,1680,2520,5040,7560,10080,15120,20160,25200,27720,45360,50400,55440,83160,110880,166320,221760,277200,332640,498960,554400,665280,720720,1081080,1441440,2162160,2882880,3603600,4324320,6486480,7207200,8648640,10810800,14414400,17297280,21621600,32432400,36756720,43243200,61261200,73513440,110270160,122522400,147026880,183783600,245044800,294053760,367567200,551350800,698377680,735134400,1102701600,1396755360

    因此我们可以写出AC代码:

    #include <bits/stdc++.h>
    using namespace std;
    int n,p[1145] = {0,1,2,4,6,12,24,36,48,60,120,180,240,360,720,840,1260,1680,2520,5040,7560,10080,15120,20160,25200,27720,45360,50400,55440,83160,110880,166320,221760,277200,332640,498960,554400,665280,720720,1081080,1441440,2162160,2882880,3603600,4324320,6486480,7207200,8648640,10810800,14414400,17297280,21621600,32432400,36756720,43243200,61261200,73513440,110270160,122522400,147026880,183783600,245044800,294053760,367567200,551350800,698377680,735134400,1102701600,1396755360};
    int main(){
    	cin >> n;
    	for(int i = 1 ; i <= 68 ; i++){
    		if(n < p[i]){
    			cout << p[i-1] << endl;
    			return 0;
    		}
    	}
    	cout << p[68] << endl;
    	return 0;
    }
    

    信息

    ID
    109
    时间
    1000ms
    内存
    128MiB
    难度
    1
    标签
    递交数
    77
    已通过
    58
    上传者