Method 1: রোট পর্যন্ত লোপ চালিয়ে।
/**Bismillahir Rahmanir Rahim.**/ #include <bits/stdc++.h> using namespace std; int NOD(int n) { int limit = sqrt(n+1); int res = 0; for(int i=1; i<=limit; i++) if(!(n%i)) res += 2; if(limit*limit==n) res--; return res; } int main() { int ans, n; scanf("%d", &n); ans = NOD(n); printf("%d\n", ans); return 0; }Method 2: প্রাইম ফ্যাক্টরাইজড করে।
/**Bismillahir Rahmanir Rahim.**/ #include <bits/stdc++.h> using namespace std; int prime[4009], x=1; void seivePrime() { char prime_b[10000]; memset(prime_b, 0, sizeof(prime_b)); int till = 10000; for(int i=4; i<=till; i+=2) prime_b[i] = 1; int limit = sqrt(till)+1; for(int i=3; i<=limit; i+=2) if(!prime_b[i]) for(int j=i*i; j<=till; j+=(i*2)) prime_b[j] = 1; prime[0] = 2; for(int i=3; i<=till; i+=2) if(!prime_b[i]) prime[x++] = i; } int NOD(int n) { int till = sqrt(n+1); int p=0, res = 1; for(int i=0; prime[i]<=till; i++) { if(n%prime[i]==0) { while(n%prime[i]==0) { n/=prime[i]; p++; } } till = sqrt(n); res *= (p+1); p = 0; } if(n>1) res *= 2; return res; } int main() { seivePrime(); int ans, n; scanf("%d", &n); ans = NOD(n); printf("%d\n", ans); return 0; }