アルゴ式(beta版)の「整数論的アルゴリズム (beta)」約数からの出典です。
algo-method.com
アルゴ式とは...
>・プログラミングや情報科学をコツコツ学べる「教科書」
>・学んだ内容をゲーム感覚で大量に実践できる「練習問題」
>の2つで構成される、Web上で完結した学習コンテンツです。
Q1. 56 の約数の個数
/* C++による「整数論的アルゴリズム (beta)」約数の解答例 Q1. 56 の約数の個数 https://algo-method.com/tasks/339 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n=56; int ans=1; int n2=n; vector<int> v(n+1); for(int i=2;i<=n;i++){ while(n2%i==0){ v[i]++; n2/=i; } } for(int i=2;i<=n;i++){ ans*=(v[i]+1); } cout<<ans<<endl; return 0; }
・Q2. 約数の個数
/* C++による「整数論的アルゴリズム (beta)」約数の解答例 Q2. 約数の個数 https://algo-method.com/tasks/344 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll n; cin>>n; ll ans=1; for(int i=2;i<=sqrt(n);i++){ int cnt=0; while(n%i==0){ cnt++; n/=i; } ans*=(cnt+1); if(n==1){ break; } } if(n!=1){ cout<<ans*2<<endl; }else{ cout<<ans<<endl; } return 0; }
・Q3. 完全数
/* C++による「整数論的アルゴリズム (beta)」約数の解答例 Q3. 完全数 https://algo-method.com/tasks/349 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll n; cin>>n; ll sum=0; for(ll i=1;i<=sqrt(n);i++){ if(n%i==0){ sum+=i; if(n/i!=i){ sum+=(n/i); } } } if(sum==n*2){ cout<<"Yes"<<endl; }else{ cout<<"No"<<endl; } return 0; }
・Q4. N = A × B
/* C++による「整数論的アルゴリズム (beta)」約数の解答例 Q4. N = A × B https://algo-method.com/tasks/346 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll n; cin>>n; ll ans=n+1; for(ll i=1;i<=sqrt(n);i++){ if(n%i==0){ ans=min(ans,i+n/i); } } cout<<ans<<endl; return 0; }
・Q5. A を割ると B あまる数
/* C++による「整数論的アルゴリズム (beta)」約数の解答例 Q5. A を割ると B あまる数 https://algo-method.com/tasks/345 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll a,b; cin>>a>>b; ll n=a-b; vector<ll> v; for(ll i=1;i<=sqrt(n);i++){ if(n%i==0){ v.push_back(i); if(n/i!=i){ v.push_back(n/i); } } } int ans=0; for(int i=0;i<v.size();i++){ if(v[i]>b){ ans++; } } cout<<ans<<endl; return 0; }
・Q6. 約数が奇数個
/* C++による「整数論的アルゴリズム (beta)」約数の解答例 Q6. 約数が奇数個 https://algo-method.com/tasks/355 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ long long n; cin>>n; long long ans=sqrt(n); cout<<ans<<endl; return 0; }
・Q7. カードめくり (1)
/* C++による「整数論的アルゴリズム (beta)」約数の解答例 Q7. カードめくり (1) https://algo-method.com/tasks/356 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ long long n; cin>>n; long long ans=sqrt(n); cout<<n-ans<<endl; return 0; }
・Q8. 約数が 3 個
/* C++による「整数論的アルゴリズム (beta)」約数の解答例 Q8. 約数が 3 個 https://algo-method.com/tasks/358 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; bool is_prime(ll n){ if(n==1 || (n!=2 && n%2==0)){ return false; } for(ll i=3;i<=sqrt(n);i++){ if(n%i==0){ return false; } } return true; } int main(void){ ll n; cin>>n; ll cnt=0; for(ll i=2;i<=sqrt(n);i++){ if(is_prime(i)){ cnt++; } } cout<<cnt<<endl; return 0; }
設問の出典は、情報科学をコツコツ積み立てて学習できるサービス「アルゴ式(beta版)」です。
algo-method.com