Prime Sum of Nth Power Program
Prime Sum of Nth Power Program
Here, in this page we will discuss the program, we are given two numbers x and n, find a number of ways x can be expressed as prime sum of n-th power of unique natural numbers.
Method Discussed :
- Method 1: Using Naive Approach
- Method 2 : Efficient way
- Method 3 : Recursive way
Method 1 :
- Iterate through all number starting from 1.
- Now, for every number we check if it is prime then go further,
- Otherwise skip that number.
- For every number, we recursively try all greater numbers and if we are able to find sum,
- We increment result
Code in C++
Code in C
Code in C++
Run
#include <bits/stdc++.h>
using namespace std;
bool isprime(int num){
for(int i=2; i<sqrt(num); i++){
if(num%i==0)
return 0;
}
return 1;
}
int power(int num, unsigned int n)
{
if (n == 0)
return 1;
else if (n % 2 == 0)
return power(num, n / 2) * power(num, n / 2);
else
return num * power(num, n / 2) * power(num, n / 2);
}
int checkRecursive(int x, int n, int curr_num = 1, int curr_sum = 0)
{
int results = 0;
int p;
if(isprime(curr_num))
p = power(curr_num, n);
while (p + curr_sum < x) {
results += checkRecursive(x, n, curr_num + 1, p + curr_sum);
curr_num++;
if(isprime(curr_num))
p = power(curr_num, n);
}
if (p + curr_sum == x)
results++;
return results;
}
// Driver Code.
int main()
{
int x = 10, n = 2;
cout << checkRecursive(x, n);
return 0;
}
Code in C
Run
#include <stdio.h>
#include <math.h>
int isprime(int num){
for(int i=2; i<sqrt(num); i++){
if(num%i==0)
return 0;
}
return 1;
}
int power(int num, unsigned int n)
{
if (n == 0)
return 1;
else if (n % 2 == 0)
return power(num, n / 2) * power(num, n / 2);
else
return num * power(num, n / 2) * power(num, n / 2);
}
int checkRecursive(int x, int n, int curr_num , int curr_sum )
{
int results = 0;
int p;
if(isprime(curr_num))
p = power(curr_num, n);
while (p + curr_sum < x) {
results += checkRecursive(x, n, curr_num + 1, p + curr_sum);
curr_num++;
if(isprime(curr_num))
p = power(curr_num, n);
}
if (p + curr_sum == x)
results++;
return results;
}
int main()
{
int x = 10, n = 2;
printf("%d ", checkRecursive(x, n, 1, 0));
return 0;
}
Output
1
Method 2 :
In this method we will discuss one of the efficient way for finding the prime sum of n-th power. For every such numbers we first check all the number first it is prime or not.
Code in C++
Code in C
Code in C++
Run
#include <bits/stdc++.h>
using namespace std;
int res = 0;
bool isprime(int num){
for(int i=2; i<sqrt(num); i++){
if(num%i==0)
return 0;
}
return 1;
}
int checkRecursive(int num, int x, int k, int n)
{
if (x == 0)
res++;
int r = (int)floor(pow(num, 1.0 / n));
for (int i = k + 1; i <= r; i++) { if(!isprime(i)) continue; int a = x - (int)pow(i, n); if (a >= 0)
checkRecursive(num, x - (int)pow(i, n), i, n);
}
return res;
}
int main()
{
int x=10, n=2;
cout << checkRecursive(x, x, 0, n);
return 0;
}
Code in C
Run
#include <stdio.h>
#include <math.h>
int res = 0;
int isprime(int num){
for(int i=2; i<sqrt(num); i++){
if(num%i==0)
return 0;
}
return 1;
}
int checkRecursive(int num, int x, int k, int n)
{
if (x == 0)
res++;
int r = (int)floor(pow(num, 1.0 / n));
for (int i = k + 1; i <= r; i++) { if(!isprime(i)) continue; int a = x - (int)pow(i, n); if (a >= 0)
checkRecursive(num, x - (int)pow(i, n), i, n);
}
return res;
}
int main()
{
printf("%d ",checkRecursive(10, 10, 0, 2));
return 0;
}
Output
1
Method 3 :
In this method we will discuss the recursive approach for finding the required number of ways.
Code in C++
Code in C
Code in C++
Run
#include <bits/stdc++.h>
using namespace std;
int res = 0;
bool isprime(int num){
for(int i=2; i<sqrt(num); i++){
if(num%i==0)
return 0;
}
return 1;
}
int checkRecursive(int num, int x, int k, int n)
{
if (x == 0)
res++;
int r = (int)floor(pow(num, 1.0 / n));
for (int i = k + 1; i <= r; i++) { if(!isprime(i)) continue; int a = x - (int)pow(i, n); if (a >= 0)
checkRecursive(num, x - (int)pow(i, n), i, n);
}
return res;
}
int main()
{
int x=10, n=2;
cout << checkRecursive(x, x, 0, n);
return 0;
}
Code in C
Run
#include <stdio.h>
#include <math.h>
int isprime(int num){
for(int i=2; i<sqrt(num); i++){
if(num%i==0)
return 0;
}
return 1;
}
int counter(int remainingSum, int power, int base){
int result = 0;
if(isprime(base))
result = pow(base, power);
if(remainingSum == result)
return 1;
if(remainingSum < result)
return 0;
int x = counter(remainingSum - result, power, base + 1);
int y = counter(remainingSum, power, base+1);
return x + y;
}
int getWays(int sum, int power) {
return counter(sum, power, 1);
}
// Driver Code.
int main()
{
int x = 10, n = 2;
printf("%d ", getWays(x, n));
return 0;
}
Output
1
Prime Course Trailer
Related Banners
Get PrepInsta Prime & get Access to all 200+ courses offered by PrepInsta in One Subscription
Get over 200+ course One Subscription
Courses like AI/ML, Cloud Computing, Ethical Hacking, C, C++, Java, Python, DSA (All Languages), Competitive Coding (All Languages), TCS, Infosys, Wipro, Amazon, DBMS, SQL and others

Login/Signup to comment