#include #include using namespace std; #define N 1000010 #define M 1000003 int p2[N],n; int dp[N]; int gcd(int a, int b) { return b==0?a:gcd(b,a%b); } int xgcd(int a, int b, int& x, int& y) { int g=a; x=1;y=0; if (b!=0) g=xgcd(b,a%b,y,x),y-=(a/b)*x; return g; } int invmod(int a, int m) { int x,y; if (xgcd(a,m,x,y)==1) return (x+m)%m; else return 0; } int calc(int x) { int& res=dp[x]; if (res!=-1) return res; res=p2[gcd(n,x)]; for (int y=1;y*y<=x;++y) if (x%y==0) { int y2=x/y; if (y