思想
首先创建个vector,vector用来存放所有满足条件的105的互质子集。
先给vector初始化1个元素,值为1,用j表示。然后我们用i去枚举2~105(1不用再枚举了,vetcor已经初始化1个1了),并且逐个与vector里面的元素作对比,如果i+j与105互质,那就把i加入到vector里面。
刚开始vector里面有1,当i为2的时候,1+2=3,不与105互质,2不加入到vector里面,i为3时,1+3=4,与105互质,3加入到vector里面,以此类推,这样vector里就存的全是i+j的和与105互质的数。
最后返回vector的size即可。
#include<bits/stdc++.h>
using namespace std;
int gcd(int a, int b) {
return b?gcd(b,a%b):a;
}
int solve(int n) {
vector<int> v{1}; // 初始结果列表包含数字1
for (int i = 2; i <= n; ++i) {
bool flag = true;
for (int j : v) {
if (gcd(j + i, 105) != 1) {
flag = false;
break;
}
}
if (flag) {
v.push_back(i);
}
}
return v.size();
}
int main() {
int n = 105;
int cnt= solve(n);
cout <<cnt;
return 0;
}
python写法
from math import gcd
def solve(n):
v = [1] # 初始结果列表包含数字1
for i in range(2, n + 1):
flag = True
for j in v:
if gcd(j + i, 105) != 1:
flag = False
break
if flag:
v.append(i)
return len(v)
if __name__ == "__main__":
n = 105
cnt = solve(n)
print(" {}".format(cnt))