# P-sequences

# P-sequences

+ 0 comments The algorithm is correct

Still it will not work for very large number TestCases: 10,11,13,16,17 and 18. They exceed computational capacity of 53bit integers. Then, a special multiplication procedure will be needed in order to get the correct modulus without errors induced by those really really really really big numbers,,,,,

function pSequences(n, p) { // Write your code here const MOD = 1000000000+7 let root = parseInt(Math.sqrt(p)), last = root*2-((root*(root+1)>p)?2:1), qtty = [], val=[], calc=[], i=0, j=last, accum=0, size=last+1 while (accum < p) calc[j--] = (accum += (val[i] = (qtty[i++] = (parseInt(p/parseInt(p/(accum+1))) - accum)))) while(n-->=2) { let next = new Array(size) accum = 0 for(i=0,j=last;i<=last;i++,j--) next[j] = (accum = (accum + (val[i] = ((qtty[i] * calc[i])%MOD)))%MOD) calc = next } return accum % MOD }

+ 0 comments In JavaScript,

var result=0; for(var i=1;i<=n;i++) { for(var j=1;j<=n;j++) { if(i*j<=p) { result = result+1; } } } return(result)

something is not working here.

+ 0 comments Hello,

I don't know how to speed up the runtime of my solution. I think I am missing a way to enumerate all the possible subsequences. If you have any ideas on how I can reduce the runtime, I would really appreciate it.

One idea I had is to create a map of the parameters (length of sequence, max value, and starting number) that can be used to look up values instead of running through the recursion each time. This seems a little too complicated, but I am currently trying it out.

Quick Summary of Code: Use recursion to determine the number of subsequences that are valid given a starting number for the sequence. For each recursion, a shorter sequence with a different inint

#include <bits/stdc++.h> using namespace std; int pSequences2(int n, int p, int prev_num) { int count = 0; if (n == 1) { // if its the last number // all subsequent numbers are those that are less than p/prev count += (p/prev_num); } else { for (int i_p=1; i_p<=p; i_p++) { if (prev_num*i_p<=p) { count += pSequences2(n-1, p, i_p); } else { break; } } } return count; } int pSequences(int n, int p) { int count = 0; // generate all possible first values of sequence count = pSequences2(n, p, 0); return count; } int main() { ofstream fout(getenv("OUTPUT_PATH")); vector< vector<int> > seqs; int n; cin >> n; cin.ignore(numeric_limits<streamsize>::max(), '\n'); int p; cin >> p; cin.ignore(numeric_limits<streamsize>::max(), '\n'); int result = pSequences(n, p); fout << result << "\n"; fout.close(); return 0; }

+ 0 comments What is the problem with this and in testcase 2 the input is 3 and 2 and the expected output is 5 which is logically impossible. The ans must be 3 and my code is also giving ans as 3.

# include

# include

int main() { int n,p,i,j,mul,count=0; scanf("%d %d",&n,&p); for(i=1;i

}

+ 1 comment static long pSequences(int n, int p) {

`long dp[][] = new long[n+1][p+1]; long m = (long)10e9+7; Arrays.fill(dp[1],1); for(int i=1;i<=n-1;i++) { for(int j=1;j<=p;j++) { for(int k=1;k<=p/j;k++) { dp[i+1][k] += dp[i][j]; dp[i+1][k] %= m; } } } long sum=0; for(int j=1;j<=p;j++) { sum += (dp[n][j]); sum %= m; } return sum; }`

Can Anyone let me know why this code is giving me wrong answer. I am aware that it will give TLE and Memory problems.I just wanna know why it is logically wrong. THank you.

Sort 11 Discussions, By:

Please Login in order to post a comment